一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 922|回复: 4
收起左侧

M8外宾写的程序不够专业?

[复制链接]
发表于 2021-1-13 10:51 | 显示全部楼层 |阅读模式
本帖最后由 chinomango 于 2021-1-13 15:06 编辑

指的是电阻DAC的那个。
不像软件工程师写的。似乎有bug啊,谁能评述一下?
结构上说,既然用了AVR Libc,相关常数如频率应当放在单个。h文件中,这样改频率只要改一个地方。
风格不统一,按钮导致的AV变化,是在按钮程序里完成,但在外面还要再限位,为何不放在一起?
延迟都是堵塞的,这是初学者的通病。

原码:http://www.linuxfocus.org/English/Archives/
http://www.tuxgraphics.org/electronics/200707/bench-power-supply-unit.shtml

// the control loop changes the dac, but only +-1 seems to be a bug
static void control_loop(unsigned char channel){
        int tmp;
        tmp=target_val[0] - analog_result[0];
        if (tmp < 1){  //current control has priority
                voltagecontrol=0; // I control
        }else{
                voltagecontrol=1; // U control
                tmp=target_val[1] - analog_result[1];
        }
        if (conversioncount>2){   //has both ADC data
                // go only once in a while close
                // to prevent permanent lsb toggle
                if (tmp > -2 && tmp < 2){
                        tmp=0;   //this might be a bug
                }
        }
        // slowly up:
        if (tmp >1){
                tmp=1;
        }
        if (tmp <-1){
                tmp=-1;
        }
        dac_val=dac_val + tmp;
        if (dac_val<0){
                dac_val=0;
        }
        dac(dac_val);
}

如果目标值与ADC值相差大于2就认为无差别?这如何理解?
还有个问题,我看国内用的多是ICCAVR,为什么不用免费的Arduino?前者是否效率高?
发表于 2021-1-13 18:07 | 显示全部楼层
本帖最后由 sln.1550 于 2021-1-13 18:08 编辑

国外也是电子爱好者写的代码,而不是专业的编程人员。
这段代码我比较熟悉,纯软件实现的控制环路。ADC相差绝对值不超过2是防止ADC采样波动导致反馈振荡的意思,不过我觉得效果不够好。Arduino会增加额外的代码,效率应该不如直接编译高吧
 楼主| 发表于 2021-1-16 01:45 | 显示全部楼层
sln.1550 发表于 2021-1-13 18:07
国外也是电子爱好者写的代码,而不是专业的编程人员。
这段代码我比较熟悉,纯软件实现的控制环路。ADC相差 ...

记得是纯软件控制环路,而非软件只设置基准,硬件比较后直接驱动调整管。
如果设定值与测量值之差大于2就认为是0,那不就没有控制了?

点评

你看错了吧,tmp就是你说的设定值和测量值之差,tmp的绝对值  详情 回复 发表于 2021-1-17 10:35
发表于 2021-1-17 10:35 | 显示全部楼层
chinomango 发表于 2021-1-16 01:45
记得是纯软件控制环路,而非软件只设置基准,硬件比较后直接驱动调整管。
如果设定值与测量值之差大于2就 ...

你看错了吧,tmp就是你说的设定值和测量值之差,tmp的绝对值<2的时候才被改成0
 楼主| 发表于 2021-1-17 10:50 | 显示全部楼层
本帖最后由 chinomango 于 2021-1-17 10:55 编辑

谢谢,老眼昏花居然看错了!
这个设计国内网友已经把潜力挖尽了或者说爆棚了。到此为止吧,我现在指望C51F412,自带2CH ADA,M8类没这个配置。其实Arduino环境最好。
8051有20年没搞了,啥都忘光了,当初的环境不是KEIL,仿真器大概是7千美元。当时参与的软件已经够复杂了,用的是基于2ms的定时器,分出2exp(n)的多个进程或者是routine。32KBx8分段程序。

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-4-18 11:38 , Processed in 0.052604 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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