STC 1T单片机实现精确到 0.004微秒级同步信号输出

最近因为需要使用STC 1T单片机进行RFID ISO15693 标签读写

 
调制发送信号时需要周期为 9.44us 左右的精确的同步信号

 
STC单片机使用 22.1184M 晶振,单周期指令执行时间约为 0.04521us 所以 9.44us时间段大约可执行 208.8 条单周期指令

 
所以有以下代码


while(1)
{

    TL0=0;

 

     //.. 可伸缩地执行少量其它代码

 

    while(TL0<205);

    OUTPIN = ~OUTPIN;

}

但实际用示波器对OUTPIN 上信号波形进行观察,发现存在不稳定的现像, 偏差最大时约 0.28us


对该段代码汇编后的汇编语句进行分析, 发现 while(TL0<205); 居然要4条语句才能实现

0034         ?C0057:
0034 E58A    MOV     A,TL0
0036 C3      CLR     C
0037 947F    SUBB    A,#07FH
0039 40F9    JC      ?C0057


对如上汇编代码,如果 MOV A,TL0 执行时TL0 值恰好为 204

 

哪么多执行一轮就得多耗掉 6个指令周期 恰好为 0.28us


显然无论怎么实现,要测试TL0中值至少得4个指令周期 误差最大为 T x 2 - 2 = 6 周期  这个避免不了

 

while(x<y) _nop_();   这样的代码是也存在同样问题。

 

使用C语的情况下暂时有且只发现switch可以实现误差补偿

while(1)
{

     TL0=0;

 

     //.. 可伸缩地执行少量其它代码

 

    while(TL0<(205-16)); // 这个 16可跟据输出进行微调

    uTime -= TL0;

    switch(uTime)
    {
       case 8: _nop_();
       case 7: _nop_();
       case 6: _nop_();
       case 5: _nop_();
       case 4: _nop_();
       case 3: _nop_();
       case 2: _nop_();
       case 1: _nop_();
       case 0: break;
    }    

    OUTPIN = ~OUTPIN;

}


以上代码对的汇编语句容易看出, 执行 NOP 句代数目在uTime-=TL0(SUBB A,TL0)哪一刻就确定了

003B C3                CLR     C
003C E500        R     MOV     A,uTime
003E 958A              SUBB    A,TL0
0040 F500        R     MOV     uTime,A
0042 14                DEC     A
0043 B41400            CJNE    A,#014H,?C0168
0046         ?C0168:
0046 505E              JNC     ?C0059

0048 900000      R     MOV     DPTR,#?C0169
004B 75F003            MOV     B,#03H
004E A4                MUL     AB
004F C583              XCH     A,DPH
0051 25F0              ADD     A,B
0053 C583              XCH     A,DPH
0055 73                JMP     @A+DPTR
0056         ?C0169:
0056 020000      R     LJMP    ?C0079
0059 020000      R     LJMP    ?C0078
005C 020000      R     LJMP    ?C0077
005F 020000      R     LJMP    ?C0076
0062 020000      R     LJMP    ?C0075
0065 020000      R     LJMP    ?C0074
0068 020000      R     LJMP    ?C0073
006B 020000      R     LJMP    ?C0072
006E 020000      R     LJMP    ?C0071
0071 020000      R     LJMP    ?C0070
0074 020000      R     LJMP    ?C0069
0077 020000      R     LJMP    ?C0068
007A 020000      R     LJMP    ?C0067
007D 020000      R     LJMP    ?C0066
0080 020000      R     LJMP    ?C0065
0083 020000      R     LJMP    ?C0064
0086 020000      R     LJMP    ?C0063
0089 020000      R     LJMP    ?C0062
008C 020000      R     LJMP    ?C0061
008F 020000      R     LJMP    ?C0060


009D         ?C0071:
009D 00                NOP
009E         ?C0072:
009E 00                NOP
009F         ?C0073:
009F 00                NOP
00A0         ?C0074:
00A0 00                NOP
00A1         ?C0075:
00A1 00                NOP
00A2         ?C0076:
00A2 00                NOP
00A3         ?C0077:
00A3 00                NOP
00A4         ?C0078:
00A4 00                NOP
00A5         ?C0079:
00A5 00                NOP

 


大家还有没更好办法?欢迎一起来讨论。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
本设计是基于STM32F334 数字电源开发板设计,高效同步buck,boost,buck-boost双向DC-DC转换器,支持恒压恒流供电。STM32F334xx 微控制器具有高分辨率定时器 ( HRTIM)外设,可产生多达 10 个信号,能够处理用于控制、同步或保护的各种不同输入信号。其模块化架构允许对大部分转换拓扑和多并联转换器进行处理,并可在运行中重新配置它们。 STM32F334 的HRTIM功能可以产生互补等各PWM波形,该定时器最大计数频率高达4.608G,时间控制精度高达217ps。笔者参考STM32F334设计手册,完成了高精度PID的数字电源。buck,boost,buck-boost均为同步整流技术,输入输出LC滤波,使得重载/轻载纹波均低于100mV,PID响应环路小于10us。STM32F334 数字电源开发板电路功能如下: STC15 PID 数字电源 BUCK/BOOST同步整流开发板视频链接: https://v.youku.com/v_show/id_XMzMzOTA4NzM5Ng==.htm... STM32 PID 数字电源 BUCK/BOOST同步整流开发板视频链接: https://v.youku.com/v_show/id_XMzMzOTM2MjQwOA==.htm... STM32 PID 数字电源 BUCK-BOOST升降压同步整流开发板视频链接: https://v.youku.com/v_show/id_XMzMzOTA4NzUyMA==.htm... 淘宝链接: https://item.taobao.com/item.htm?spm=a1z38n.106770... https://item.taobao.com/item.htm?spm=a1z38n.106770... https://item.taobao.com/item.htm?spm=2013.1.201410... BUCK开发版基本电气 输入端口为A端口 指标输入电压:10~55V,输出电压:5~50V 电流:在良好的散热条件下,最大电流不超过6A 功率:在良好的散热条件下,最大功率不超过200w 高效率设计,支持的最大效率最大96% 输出纹波:LC滤波,低纹波 散热情况:100W无需要散热片;100W以上,需要良好的散热条件 调压调流方式:UART控制,写入相应的格式进行调压调流。或通过按键 进行调整。 显示窗口:IIC OLED12864 与电脑串口软件。 Boost开发版基本电气 指标输入电压:10~55V,输出电压:12-60V 电流:在良好的散热条件下,最大电流不超过6A 功率:在良好的散热条件下,最大功率不超过200w 高效率设计,支持的最大效率超过97% 输出纹波:LC滤波,低纹波 支持串口调压调流,PID算法,良好的响应时间。过压过流打嗝保护。 散热情况:100W无需要散热片;100W以上,需要良好的散热条件。 调压调流方式:UART控制,写入相应的格式进行调压调流。或通过按键 进行调整。 显示窗口:IIC OLED12864 与电脑串口软件。 Buck-Boost升降压开发版基本电气 指标输入电压:10~55V,输出电压:5~50V,无缝切换,但是尽量避免切换点 电流:在良好的散热条件下,最大电流不超过6A 功率:在良好的散热条件下,最大功率不超过150w 高效率设计,支持的最大效率超过 BUCK 最大92%,Boost 最大93%,如果加入防反接设计,效率会偏低2-3%个点。 输出纹波:LC滤波,低纹波 支持串口调压调流,PID算法,响应时间较差,使用于蓄电池充电。过压过流打嗝保护。 散热情况:100W无需要散热片;100W以上,需要良好的散热条件。 调压调流方式: UART控制,写入相应的格式进行调压调流。或通过按键进行调整。 显示窗口:IIC OLED12864 与电脑串口软件。 STM32开发板综述: STC15 开发板综述: 在 STM32 微控制器中, STM32F334xx 产品的目标市场是需要高度精确计时数字信号、尤其是数字功率转换应用的细分市场。包括:数字电源;照明;不间断电源;太阳能逆变器;无线充电器等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值