移相器的后续问题

1)讨论用DAC输出方波与普通IO通过翻转电平输出方波的延时误差

DAC延时问题

STM32的DAC转换时间是:如果输入数据变化最大,即从0x3FF变为0,或从0变为0x3FF,则最多需要4us时间;如果输入数据变化最小,即只有一个数字量的变化,则最多需要1us时间。简单计算得1KHZ方波延时误差约为1°。

引脚翻转电平速度:

最快的是
  GPIOA ->ODR = 0x1;  GPIOA ->ODR = 0x0;
和   PA0 = 0x01;PA0 = 0x00;   
和   GPIOA ->BSRR = 0x01;         GPIOA ->BRR = 0x01;
转换周期是220ns,4.55Mhz
最慢的是  *PAO0 = !*PAO0 ;  和  PA0 =!PA0;  取反操作浪费不少时间
转换周期是900ns  1.11Mhz

引自https://blog.csdn.net/silno/article/details/39636911

2)

STM32F103的输出的PWM能否任意改变相位?

回答是:能!

实现方法如下:

STM32的定时器的PWM模式使用TIMx_ARR寄存器控制PWM输出的频率,使用TIMx_CCRx寄存器控制PWM输出的占空比,如果需要移相,只需要在希望移动相位的时刻临时增加或减少TIMx_ARR寄存器的内容,过一个周期之后再恢复TIMx_ARR的内容即可。

这里的一个关键问题是,TIMx_ARR寄存器拥有影子寄存器,改变它的内容时并不会立即影响输出的信号波形,而是在输出波形的一个完整周期结束时才会把影子寄存器的内容拷贝到实际操作的寄存器,这样就可以保证输出波形的每一个周期都是完整的。如果没有影子寄存器,实现这种移相的要求是比较困难的,软件程序很难能够精确地对齐输出波形的周期边缘。

引自:https://www.veryarm.com/152855.html

没有试验过,感觉原理上可行。

另外,今天用TIMER输出1khz的PWM波,发现与信号源产生的1khz方波一同显示在示波器上时,两个的相位不断减小,不断循环,后来仔细观察,发现信号源输出的方波频率不稳定,每隔几秒会变为999hz,感觉可以侧面佐证这个观点。

3)所以IO翻转电平的方法要比TIMER实现移相好一些,因为前者可以在每个上升沿或下降沿进行校正。

 

2019.7.23.18.53

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值