liangquan 发表于 2015-5-15 14:18:58

相位与频率修正PWM模式发出pwm信号

想通过一个变阻器调节pwm信号的频率。

选择了相位频率修正PWM模式,代码线路图如下,怎么得不到PWM信号呢?

// PWM signal generation using arduino
// 相位与频率修正pwm模式
int analog_pin = 0;   // analog pin, receive resister input

float val=0;// current analog input

void setup()
{
pinMode(9,OUTPUT);// 11 number pin OC2A
TCCR1A = _BV(COM1A1) | _BV(COM1A0) | _BV(WGM10);
TCCR1B = _BV(WGM13) | _BV(CS10);
ICR1 = 0x00fe;
OCR1A = 0x01ff;
TCNT1 = 0x00FF;
Serial.begin(9600);
}

void loop()
{
val = analogRead(analog_pin);
val = val/1000;
Serial.print(val);
Serial.print('\t');

Serial.print(val*0xffff);
Serial.print('\n');
}

zoologist 发表于 2015-5-15 14:55:50

写 pwm的代码在哪里?

liangquan 发表于 2015-5-15 15:04:45

zoologist 发表于 2015-5-15 14:55 static/image/common/back.gif
写 pwm的代码在哪里?

您说应该写pwm?怎样写?

zoologist 发表于 2015-5-15 15:14:52

一般不都是这样写的么?    analogWrite(pwm1, 78);   //PWM调速

liangquan 发表于 2015-5-15 15:18:52

zoologist 发表于 2015-5-15 15:14 static/image/common/back.gif
一般不都是这样写的么?    analogWrite(pwm1, 78);   //PWM调速

我加了也不行!// PWM signal generation using arduino
// 相位与频率修正pwm模式
#include <avr/interrupt.h>
int analog_pin = 0;   // analog pin, receive resister input

float val=0;// current analog input

void setup()
{
pinMode(9,OUTPUT);// 11 number pin OC2A
TCCR1A = _BV(COM1A1) | _BV(WGM11) | _BV(WGM10);
TCCR1B = _BV(WGM13) | _BV(CS10);
OCR1A = 0x0f;
TCNT1 =0x00ff;

Serial.begin(9600);
}

void loop()
{
val = analogRead(analog_pin);
val = val/1000;
Serial.print(val);
Serial.print('\t');
analogWrite(9,128);
Serial.print(val*0xffff);
Serial.print('\n');
}

liangquan 发表于 2015-5-15 15:23:43

zoologist 发表于 2015-5-15 15:14 static/image/common/back.gif
一般不都是这样写的么?    analogWrite(pwm1, 78);   //PWM调速

我这个代码用快速PWM模式,也不用analogWrite的,就可以发出pwm波// PWM signal generation using arduino
// 这个例子只能调整占空比
int analog_pin = 0;   // analog pin, receive resister input

float val=0;// current analog input

void setup()
{
pinMode(9,OUTPUT);// 11 number pin OC2A
TCCR1A = _BV(COM1A1) | _BV(WGM11) | _BV(WGM10) ; // 比较匹配时,OC1A/OC1B端口清零,OC1A/OC1B在Top时置位
TCCR1B = _BV(WGM12) | _BV(CS12) | _BV(CS10); // 采用的是10位快速PWM模式
OCR1A = 0x03ff;
Serial.begin(9600);
}

void loop()
{
val = analogRead(analog_pin);
val = val/1000;
Serial.print(val);
Serial.print('\t');
OCR1A = val*0x03ff;
Serial.print(val*0x03ff);
Serial.print('\n');
}

liangquan 发表于 2015-5-15 15:26:22

zoologist 发表于 2015-5-15 15:14 static/image/common/back.gif
一般不都是这样写的么?    analogWrite(pwm1, 78);   //PWM调速

我快速pwm模式实现了,但是相位修正没实现

liangquan 发表于 2015-5-15 15:32:25

liangquan 发表于 2015-5-15 15:26 static/image/common/back.gif
我快速pwm模式实现了,但是相位修正没实现

仍然十分感谢
页: [1]
查看完整版本: 相位与频率修正PWM模式发出pwm信号