学习单片机也快一个月了,上次用51单片机调节脉宽仿正玄波已经可以了,不过这种仿制的效果差,看大家都用16F来输出,我也购买了5片,我学习简直是烧钱,唉,没办法,谁让上学时没学好呢,前天16芯片到货,打开一看是16L,6块一片买的,好像16F是16块一片,买了便宜的.
昨天拿出开发板烧写下试试,发现提示错误,弄了一个下午,最后发现,学习板上写支持AVR,可是16L的管脚用途跟51不一样,根本就不能用,按照资料做了个最小系统烧写,成功.
我的学习板买的是便宜的,100块,带烧写仿真实验,学习板好像是个人制作的,没有网站,没有技术支持,现在才知道贵的不贵了,没办法,自己走弯路吧.
上次用51仿制的波形
500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/84/3687191260926693.jpg?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg,t_20');}" onmousewheel="return imgzoom(this);">
调节宽度,仿制正玄波,但是每个脉高都是一样的,这样的高次谐波影响很大,昨天想到这样一个解决方法,51单片机其实可以做出每个高度不同的方波,图片如下
500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/84/3687191260927074.jpg?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg,t_20');}" onmousewheel="return imgzoom(this);">
这样由不同宽度不同高度叠加起来的波形就很接近正玄波了,再由滤波器简单滤波就是很平滑的正弦波了,经测试可以的,可是本人没有示波器不能上传波形,只能由万用表测量1HZ以下的超低频电压变化来看.再由LED亮度渐变来看.
一个STC89S52可以给一个波形64分频,也就是64个方波叠加出一个正玄波,个人认为,要比256分频脉宽方波仿制出来的效果好.
好像现在研究这个没什么实际意义了,因为PWM得专用芯片很多了,可能输出的波形是纯正弦波呢,没用过呢,还不知道,不能乱说.这个只是笔记,您就当新手发神经吧.
好像说,这个高度宽度叠加做正弦波没什么意义了,可是这个有其它意义,您继续往下看,我们用这种方式通讯的话,那将最少提高通讯速度一倍以上,下面的只是想法,还需要实践,先把想法说出来,很可能是天方夜谭,不过是新手接触单片机以来的想法.
我们用的单片机大多是8位单片机,通讯时发送接收传送的是2进制代码,再由接收者解码出8进制10进制16进制等,也就是说我们每发送一个数字,要至少8个脉冲,比如要发送10进制数170,就要传送10101010,8个1,然后解码成170来用,因为发送的是等高的脉冲,不能区分出0,1以外的数,脉冲波形如下
500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/84/3687191260928494.jpg?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg,t_20');}" onmousewheel="return imgzoom(this);">
假设我们可以发送0,1,2,3四个数呢,我们把2个2进制数编程1个四进制数来发送,将快一倍的传送速度,下面我们把2进制变成四进制,取出2个2进“00=0”“01=1”“10=2”“11=3”这样变换,还是发送十进制数170,2进制为“10101010”4进制为“2222”四个2,我们把脉冲高度定义一下,脉冲高度定义“0电压=0”“1V=1”"2V=2""3V=3"这样我们发送不同的电压高度,发送四个2V电压,接收者收到电压后解码为每个2=两个10,2222=10101010,这样就得到的还是这个2进制数,但是传送时只占用了4个脉冲的长度,速度提高了一倍,如果我们把脉冲高度精确到8进制呢,速度就又提高了一倍,现在我画出发送四个2的波形
500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/84/3687191260929539.jpg?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg,t_20');}" onmousewheel="return imgzoom(this);">
上图每个方波对应一个数,简单理解为电压,1V电压以下为0,2V以下电压为1,3V电压以下为2,4V电压以下为3,这样也就有了误差,比如我们发送四个2,我们可以发送四个2.5V的电压,上下都留有误差值.
好了,笔记写到这里,现在还需要先解决温饱问题,这样的传送技术问题以后学到一定技术高度后在回来继续学,对不对的高手们不要砸砖啊,哈哈,如果哪位大侠觉得感兴趣可以一起学习交流啊,我QQ,25567239,6100291