采用PIC单片机CCP来作频率发生器的一种方法:
由于一个项目需要驱动步进电机,主控用的是18F单片机,需要产生一个脉冲驱动信号,想来想去,觉得用CCP模块来做
还是比较合适.
由于步进电机不能突然加减速,需要一个加速过程,这样一来,加减速必然要用频率的变化来控制
方法为:采用两CCP,其中一个CCP设为比较-输出翻转模式,CCP比较值设为=0X0001,这样TMR1只要计数到1时,
输出都会
翻转,而用另一个CCP来复位TMR1,比如CCP2,若CCP2设为2,则TMR1累加到2时,TMR1被复位,当CCP2的比较器值从2-65535时,
输出频率将按倒数关系变化.从而达到自动输出指定频率而不需占用中断的目的.
若需要变更输出频率,只要改CCP2的寄存器值即可,相当方便.当最高频率为5K时,最低频率为5Hz.
CCP 频率 步差
50---6250Hz -6154 高频段
51---6126Hz 124
52---6009Hz 117
53---5895Hz 114
54---5786Hz 109
55---5681Hz 105
56---5580Hz 101
57---5481Hz 99
58---5387Hz 94
59---5296Hz 91
60---5208Hz 88
61---5122Hz 86
62---5040Hz 82
63---4960Hz 80
64---4882Hz 78
65---4807Hz 75
179---1745Hz 10 中频段
180---1735Hz 10
181---1726Hz 9
182---1716Hz 10
183---1707Hz 9
184---1698Hz 9
185---1688Hz 10
186---1680Hz 8
187---1670Hz 10
188---1661Hz 9
189---1653Hz 8
190---1644Hz 9
191---1635Hz 9
192---1627Hz 8
193---1618Hz 9
194---1610Hz 8
195---1602Hz 8
12501---24Hz 1 低频段
12821---23Hz 1
13514---22Hz 1
13889---21Hz 1
14706---20Hz 1
15626---19Hz 1
16130---18Hz 1
17242---17Hz 1
17858---16Hz 1
19231---15Hz 1
20834---14Hz 1
21740---13Hz 1
23810---12Hz 1
25001---11Hz 1
27778---10Hz 1
31251---9Hz 1
33334---8Hz 1
38462---7Hz 1
41667---6Hz 1
由上表可看出,低频段,步差只有1HZ,在高频段100HZ,驱动步进马达足够了.
唯一不好的是当定入CCP2寄存器时,因为高低CCPH,CCPL不是同时写入,如从0x123变更到0x235,时若先写入2高
字节,而低字节为0x23,若刚好TMR1计数到0x223,那么将会引起TMR1复位,
而此时输出率率会产生跳跃,为避免这
种情况,采用了一个笨办法,强制TMR1ON=0,关闭TMR1再定入CCP2寄存器值,写完后再打开TMR1,虽然会引起TMR1停
几个指令周期,但这个时间相当短,也就略过不计了,但最好是把GIE也关闭,因为若TMR1ON=0时,碰巧来了中断,
那么就会使TMR1停止比较长的时间了.
或许还要更好的方法,权当抛砖引玉,各位探讨下看. |
|