极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15390|回复: 7

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

[复制链接]
发表于 2015-5-15 14:18:58 | 显示全部楼层 |阅读模式
想通过一个变阻器调节pwm信号的频率。

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

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

  4. float val=0;  // current analog input

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

  15. void loop()
  16. {
  17.   val = analogRead(analog_pin);
  18.   val = val/1000;
  19.   Serial.print(val);
  20.   Serial.print('\t');

  21.   Serial.print(val*0xffff);
  22.   Serial.print('\n');
  23. }
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-5-15 14:55:50 | 显示全部楼层
写 pwm的代码在哪里?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-15 15:04:45 | 显示全部楼层
zoologist 发表于 2015-5-15 14:55
写 pwm的代码在哪里?

您说应该写pwm?怎样写?
回复 支持 反对

使用道具 举报

发表于 2015-5-15 15:14:52 | 显示全部楼层
一般不都是这样写的么?    analogWrite(pwm1, 78);   //PWM调速
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-15 15:18:52 | 显示全部楼层
zoologist 发表于 2015-5-15 15:14
一般不都是这样写的么?    analogWrite(pwm1, 78);   //PWM调速

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

  5. float val=0;  // current analog input

  6. void setup()
  7. {
  8.   pinMode(9,OUTPUT);  // 11 number pin OC2A
  9.   TCCR1A = _BV(COM1A1) | _BV(WGM11) | _BV(WGM10);
  10.   TCCR1B = _BV(WGM13) | _BV(CS10);
  11.   OCR1A = 0x0f;
  12.   TCNT1 =0x00ff;
  13.   
  14.   Serial.begin(9600);
  15. }

  16. void loop()
  17. {
  18.   val = analogRead(analog_pin);
  19.   val = val/1000;
  20.   Serial.print(val);
  21.   Serial.print('\t');
  22.   analogWrite(9,128);
  23.   Serial.print(val*0xffff);
  24.   Serial.print('\n');
  25. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-15 15:23:43 | 显示全部楼层
zoologist 发表于 2015-5-15 15:14
一般不都是这样写的么?    analogWrite(pwm1, 78);   //PWM调速

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

  4. float val=0;  // current analog input

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

  13. void loop()
  14. {
  15.   val = analogRead(analog_pin);
  16.   val = val/1000;
  17.   Serial.print(val);
  18.   Serial.print('\t');
  19.   OCR1A = val*0x03ff;
  20.   Serial.print(val*0x03ff);
  21.   Serial.print('\n');
  22. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-15 15:26:22 | 显示全部楼层
zoologist 发表于 2015-5-15 15:14
一般不都是这样写的么?    analogWrite(pwm1, 78);   //PWM调速

我快速pwm模式实现了,但是相位修正没实现
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-15 15:32:25 | 显示全部楼层
liangquan 发表于 2015-5-15 15:26
我快速pwm模式实现了,但是相位修正没实现

仍然十分感谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 03:02 , Processed in 0.037972 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表