让找料更便捷
电子元器件
采购信息平台
生意随身带
随时随地找货
一站式电子元器件
采购平台
半导体行业观察第一站
标签:
摘要: /** 函数库说明:ATMEGE8 T1定时器 快速PWM* 版本: v1.0 * 修改: 庞辉 * 修改日期: 2011年08月11日 * * 说明: OC1A 20khz 50%占空比* OC1B 10khz 33%占空比* 且在溢出中断中频率不断改变 *
* 函数库说明:ATMEGE8 T1定时器 快速PWM* 版本: v1.0 * 修改: 庞辉 * 修改日期: 2011年08月11日 * * 说明: OC1A 20khz 50%占空比* OC1B 10khz 33%占空比* 且在溢出中断中频率不断改变 * * 版本更新: * *注意:快速PWM模式 WGM1=5,6,7,14,15 * 单斜波计数,用于输出高频率的PWM信号(比双斜波的高一倍频率) * 都有TOV1溢出中断,发生于TOP时 * 比较匹配后可以产生OCF1x比较匹配中断. * WGM1=5时, 最大值为0x00FF, 8位分辨率 * WGM1=6时, 最大值为0x01FF, 9位分辨率 * WGM1=7时, 最大值为0x03FF,10位分辨率 * WGM1=14时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断 (单缓冲) * WGM1=15时,最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断(双缓冲,但OC1A将没有PWM能力,最多只能输出方波) * 改变TOP值时必须保证新的TOP值不小于所有比较寄存器的数值 * 注意,即使OCR1A/B设为0x0000,也会输出一个定时器时钟周期的窄脉冲,而不是一直为低电平 * 计算公式:fPWM=fclk_IO/(N*(1+TOP))/#include#include interrupt.h>int main(void){ //PB1 PB2 设置为输出模式 DDRB |= (1 << DDB1) | (1 << DDB2); //PWM周期计数器 ICR1 = 300; //PB1占空比计数器,占空比50% OCR1A = 150; //PB2占空比计数器,占空比50% OCR1B = 100; //OC1A OC1B起始高电平电平 TCCR1A |= (1 << COM1A1) | (1 << COM1B1) | (1 << WGM11); //使能溢出中断 //TIMSK |= (1 << TOIE1); //开总中断 //sei(); //OC1A OC1B 快速PWM,TOP值为ICR1,不分频,PWM启动 TCCR1B |= (1 << WGM13) | (1 << WGM12) | (1 << CS10); while(1); return 0;}volatile unsigned int i = 0;//定时器1溢出中断SIGNAL(SIG_OVERFLOW1){ i++; //3秒 if(i == 60000) { i = 0; ICR1 += 50; } if(ICR1 == 500) { ICR1 = 300; }}
上一篇:已经是第一篇
型号 | 厂商 | 价格 |
---|---|---|
EPCOS | 爱普科斯 | / |
STM32F103RCT6 | ST | ¥461.23 |
STM32F103C8T6 | ST | ¥84 |
STM32F103VET6 | ST | ¥426.57 |
STM32F103RET6 | ST | ¥780.82 |
STM8S003F3P6 | ST | ¥10.62 |
STM32F103VCT6 | ST | ¥275.84 |
STM32F103CBT6 | ST | ¥130.66 |
STM32F030C8T6 | ST | ¥18.11 |
N76E003AT20 | NUVOTON | ¥9.67 |