智能小车的变速怎么实现?arduino uno的芯片atmel328p的引脚可以配置pwm功能。简单来说,这个功能就能调整电流的大小,这样就能控制电机的变速,led不同频率的闪烁。
先看下arduino uno的pwm引脚,如下图有六个引脚标有“~”,表示它们可以配置pwm。
为什么是3、5、6、9、10、11这6个?先在印制板图里找到这6个引脚的名称分别为:IO3,IO5,IO6,IO9,SS,MOSI。注意在EAGLE7.3.0这个软件中查看印制板图的方法是先在引脚上右键选择name菜单,名称就会弹出来,再左键选下一个引脚,名称就会自动弹出来了。
![](http://oaww1e004.bkt.clouddn.com/che_49_1.jpg)
我们再打开原理图,看看这6个名称对应了atmel328p的那些引脚。如下图,我已经在图里标出了这6个引脚名:
![](http://oaww1e004.bkt.clouddn.com/che_49_2.jpg)
最后再打开atmel328p的数据手册,查看引脚图,找到这6个引脚(PB3,PB2,PB1,PD6,PD5,PD3)。
![](http://oaww1e004.bkt.clouddn.com/che_49_3.jpg)
在atmel328p数据手册中可以查到计数器有几种模式,如下图,快速pwm模式与相位修正模式。而这两者的区别主要在频率(led闪烁的快慢)与输出大小(led亮的时间)上。不同的特性由是寄存器的不同比较模式与波形决定的。其实我体会得不是很到位,但是从现象上(led)看还是很明显的。
![](http://oaww1e004.bkt.clouddn.com/che_49_7.jpg)
![](http://oaww1e004.bkt.clouddn.com/che_49_6.png)
我还是用《avr单片机入门与速成攻略》上面的例子来调试程序和搭建硬件。由于我用的atmel328p与书上的芯片不一样,所以还是有很多不同的设置的。但主要思路还是用开关来设置OCR0A寄存器,用数码管来显示它的值,从PD6(OC0A)引脚连接led的正极。开关的分别连接PD0、PD1代表加数字与减数字。
代码如下:![](http://oaww1e004.bkt.clouddn.com/che_49_5.jpg)
![](http://oaww1e004.bkt.clouddn.com/che_49_4.jpg)