打印
[Atmel]

用AtmelStudio6.2跑mega16例程(47)可调电机速度

[复制链接]
834|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本例中调节可变电阻,然后AD转换,从而控制PWM宽度,从而控制电机转速。
CCR1A = 0x83 低两位将TCCR1A寄存器波形发生器模式(Waveform Generation mode)选择位WGM1[1:0]设为11,和前两位。
为0011可知T/C1工作模式为10位PWM,相位可调。
TCCR1B = 0x02 低两位同TCCR1A高4位COM1A[1:0]设置T/C1的比较输出模式(Compare Output Modulation:COM).

加1计数与OCR1A比较匹配时将OC1A引脚清零,减1计数写OCR1A比较匹配时将OC1A引脚置1

Proteus运行截图:

Studio6.2运行截图:

程序清单:
/*
* GccApplication10.c
*
* Created: 2014-11-5 19:25:00
*  Author: Administrator
*/

#define F_CPU 4000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <stdint.h>

uint16_t ADC_Convert(uint8_t CH)
{
   int Result;
   ADMUX = CH;
   Result = (uint16_t)(ADCL+(ADCH << 8));
   return Result;
}
       

int main(void)
{
    uint16_t x= 0;
        uint16_t PRE_ADC_Result = 0;
        DDRA = 0x00;
        PORTA = 0xFF;
        DDRD = 0xFF;
        PORTD = 0xFF;
        DDRC = 0xFF;
        ADCSRA = 0xE6;
        _delay_ms(3000);
        TCCR1A = 0x83;
        TCCR1B = 0x02;
        while(1)
        {
                x = ADC_Convert(7);
                if(x != PRE_ADC_Result)
                {
                        PRE_ADC_Result = x;
                        if(x==1023) x=0;
                        else if(x==0) x=1023;
                        OCR1A = x;
                }
        }
       
}
       


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2399

主题

6964

帖子

68

粉丝