色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PID運(yùn)算程序和初始化程序的實(shí)現(xiàn)

GReq_mcu168 ? 來(lái)源:搜狐網(wǎng) ? 作者:搜狐網(wǎng) ? 2020-10-09 12:01 ? 次閱讀

設(shè)計(jì)中采用了專門的芯片組成了PWM信號(hào)的發(fā)生系統(tǒng)并且對(duì)PWM信號(hào)的原理、產(chǎn)生方法以及如何通過(guò)軟件編程對(duì)PWM信號(hào)占空比進(jìn)行調(diào)節(jié)從而控制其輸入信號(hào)波形等均作了詳細(xì)的闡述。另外本系統(tǒng)中使用了紅外對(duì)管對(duì)直流電機(jī)的轉(zhuǎn)速進(jìn)行測(cè)量,經(jīng)過(guò)整形電路后將測(cè)量值送到單片機(jī),并且最終作為反饋值輸入到單片機(jī)進(jìn)行PID運(yùn)算從而實(shí)現(xiàn)了對(duì)直流電機(jī)速度的控制。在軟件方面,文章中詳細(xì)介紹了PID運(yùn)算程序初始化程序等的編寫思路和具體的程序?qū)崿F(xiàn)。

1 單片機(jī)最小系統(tǒng):單片機(jī)最小系統(tǒng)由51單片機(jī),晶振電路,復(fù)位電路,電源組成。大家都比較熟悉,這里不再贅述。

2 四位數(shù)碼管顯示:在應(yīng)用系統(tǒng)中,設(shè)計(jì)要求不同,使用的LED顯示器的位數(shù)也不同,因此就生產(chǎn)了位數(shù),尺寸,型號(hào)不同的LED顯示器供選擇,在本設(shè)計(jì)中,選擇4位一體的數(shù)碼型LED顯示器,簡(jiǎn)稱“4-LED”。本系統(tǒng)中前三位顯示電壓的整數(shù)位,最后一位顯示轉(zhuǎn)速的小數(shù)位。4-LED顯示器引腳如圖2所示,是一個(gè)共陰極接法的4位LED數(shù)碼顯示管,其中a,b,c,e,f,g為4位LED各段的公共輸出端,1、2、3、4分別是每一位的位數(shù)選端,dp是小數(shù)點(diǎn)引出端,4位一體LED數(shù)碼顯示管的內(nèi)部結(jié)構(gòu)是由4個(gè)單獨(dú)的LED組成,每個(gè)LED的段輸出引腳在內(nèi)部都并聯(lián)后,引出到器件的外部。

3 電機(jī)驅(qū)動(dòng)電路:電機(jī)驅(qū)動(dòng)電中是采用ULN2003來(lái)驅(qū)動(dòng)。ULN2003是高耐壓、大電流達(dá)林頓陳列,由七個(gè)硅NPN達(dá)林頓管組成。該電路的特點(diǎn):ULN2003的每一對(duì)達(dá)林頓都串聯(lián)一個(gè)2.7K的基極電阻,在5V的工作電壓下它能與TTL和CMOS電路直接相連,可以直接處理原先需要標(biāo)準(zhǔn)邏輯緩沖器來(lái)處理的數(shù)據(jù),輸入5VTTL電平,輸出可達(dá)500mA/50V。ULN2003的引腳圖,其中IN1~IN7為輸入控制端;OUT1~OUT7為輸出端;8腳為芯片的接地端;9腳為公共端,該腳是內(nèi)部7個(gè)續(xù)流二極管負(fù)極的公共端,各二極管的正極分別接各達(dá)林頓管的集電極。用于感性負(fù)載時(shí),該腳接負(fù)載電源正極,實(shí)現(xiàn)續(xù)流作用。如果該腳接地,實(shí)際上就是達(dá)林頓管的集電極對(duì)地接通。

當(dāng)P1.0中為高電平時(shí),其內(nèi)部三極管導(dǎo)通,使電機(jī)轉(zhuǎn)動(dòng)。當(dāng)P1.0為低電平時(shí),內(nèi)部三極管截止,電路斷開,電機(jī)停止轉(zhuǎn)動(dòng)。所以在程序中可以利用P1.0口輸出PWM波來(lái)控制電機(jī)的轉(zhuǎn)速。

4 紅外測(cè)速電路:發(fā)射管工作時(shí)發(fā)出紅外線,當(dāng)接收管收到紅外信號(hào)時(shí),其電阻變小(本設(shè)計(jì)相當(dāng)于從無(wú)窮大變到1k左右)。利用其電阻變化,改變接收管分壓情況。擋片是利用圓盤上剪四個(gè)孔,當(dāng)擋片隨電機(jī)轉(zhuǎn)動(dòng)時(shí),接收管兩端電平發(fā)生變化,產(chǎn)生脈沖。

5 整形電路:本設(shè)計(jì)的整形電路是用555定時(shí)器接成的施密特觸發(fā)器。

6 源程序:

#include "reg52.h"

#define uchar unsigned char

#define uint unsigned int

uchar code table[10]={0x3f,0x06,0x5b,

0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰數(shù)碼管顯示碼(0-9)

sbit xiaoshudian=P0^7;

sbit wei1=P2^4; //數(shù)碼管位選定義

sbit wei2=P2^5;

sbit wei3=P2^6;

sbit wei4=P2^7;

sbit beep=P2^3; //蜂鳴器控制端

sbit motor = P1^0; //電機(jī)控制

sbit s1_jiasu = P1^4; //加速按鍵

sbit s2_jiansu= P1^5; //減速按鍵

sbit s3_jiting=P1^6; //停止/開始按鍵

uint pulse_count; //INT0接收到的脈沖數(shù)

uint num=0; //num相當(dāng)于占空比調(diào)節(jié)的精度

uchar speed[3]; //四位速度值存儲(chǔ)

float bianhuasudu; //當(dāng)前速度(理論計(jì)算值)

float reallyspeed; //實(shí)際測(cè)得的速度

float vv_min=0.0;vv_max=250.0;

float vi_Ref=60.0; //給定值

float vi_PreError,vi_PreDerror;

uint pwm=100; //相當(dāng)于占空比標(biāo)志變量

int sample_time=0; //采樣標(biāo)志

float v_kp=1.2,v_ki=0.6,v_kd=0.2; //比例,積分,微分常數(shù)

void delay (uint z)

{

uint x,y;

for(x=z;x>0;x--)

for (y=20;y>0;y--);

}

void time_init()

{

ET1=1; //允許定時(shí)器T1中斷

ET0=1; //允許定時(shí)器T0中斷

TMOD = 0x15; //定時(shí)器0計(jì)數(shù),模式1;定時(shí)器1定時(shí),模式1

TH1 = (65536-100)/256; //定時(shí)器1值,負(fù)責(zé)PID中斷 ,0.1ms定時(shí)

TL1 = (65536-100)%6;

TR0 = 1; //開定時(shí)器

TR1 = 1;

IP=0X08; //定時(shí)器1為高優(yōu)級(jí)

EA=1; //開總中斷

}

void keyscan()

{

float j;

if(s1_jiasu==0) //加速

{

delay(20);

if(s1_jiasu==0)

vi_Ref+=10;

j=vi_Ref;

}

while(s1_jiasu==0);

if(s2_jiansu==0) //減速

{

delay(20);

if(s2_jiansu==0)

vi_Ref-=10;

j=vi_Ref;

}

while(s2_jiansu==0);

if(s3_jiting==0)

{

delay(20);

motor=0;

P1=0X00;

P3=0X00;

P0=0x00;

}

while(s3_jiting==0);

}

float v_PIDCalc(float vi_Ref,float vi_SpeedBack)

{

register float error1,d_error,dd_error;

error1=vi_Ref-vi_SpeedBack; //偏差的計(jì)算

d_error=error1-vi_PreError; //誤差的偏差

dd_error=d_error-vi_PreDerror; //誤差變化率

vi_PreError=error1; //存儲(chǔ)當(dāng)前偏差

vi_PreDerror=d_error;

bianhuasudu=(v_kp*d_error+v_ki*vi_PreError+v_kd*dd_error);

return (bianhuasudu);

}

void v_Display()

{

uint sudu;

sudu=(int)(reallyspeed*10); //乘以10之后強(qiáng)制轉(zhuǎn)化成整型

speed[3]=sudu/1000; //百位

speed[2]=(sudu00)/100; //十位

speed[1]=(sudu0)/10; //個(gè)位

speed[0]=sudu; //小數(shù)點(diǎn)后一位

wei1=0; //第一位打開

P0=table[speed[3]];

delay(5);

wei1=1; //第一位關(guān)閉

wei2=0;

P0=table[speed[2]];

delay(5);

wei2=1;

wei3=0;

P0=table[speed[1]];

xiaoshudian=1;

delay(5);

wei3=1;

wei4=0;

P0=table[speed[0]];

delay(5);

wei4=1;

}

void BEEP()

{

if((reallyspeed)>=vi_Ref+5||(reallyspeed

{

beep=~beep;

delay(4);

}

}

void main()

{

time_init();

motor=0;

while(1)

{

v_Display();

BEEP();

}

if(s3_jiting==0) //對(duì)按鍵3進(jìn)行掃描,增強(qiáng)急停效果

{

delay(20);

motor=0;

P1=0X00;

P3=0X00;

P0=0x00;

}

while(s3_jiting==0);

}

void timer0() interrupt 1

{

}

void timer1() interrupt 3

{

TH1 = (65536-100)/256; //1ms定時(shí)

TL1 = (65536-100)%6;

sample_time++;

if(sample_time==5000) //采樣時(shí)間0.1ms*5000=0.5s

{

TR0=0; //關(guān)閉定時(shí)器0

sample_time=0;

pulse_count=TH0*255+TL0; //保存當(dāng)前脈沖數(shù)

keyscan(); //掃描按鍵

reallyspeed=pulse_count/(4*0.6); //計(jì)算速度

pwm=pwm+v_PIDCalc(vi_Ref,reallyspeed);

if(pwm

if(pwm>100)pwm=100;

TH0=TL0=0;

TR0=1; //開啟定時(shí)器0

}

num++;

if(num==pwm) //此處的num值,就是占空比

{

motor=0;

}

if(num==100) //100相當(dāng)于占空比調(diào)節(jié)的精度

{

num=0;

motor=1;

}

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • PID
    PID
    +關(guān)注

    關(guān)注

    35

    文章

    1473

    瀏覽量

    85763
  • 初始化程序
    +關(guān)注

    關(guān)注

    1

    文章

    4

    瀏覽量

    6729

原文標(biāo)題:厲害了我的單片機(jī)!看它如何控制PWM信號(hào)實(shí)現(xiàn)直流電機(jī)轉(zhuǎn)速控制~

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ADS1259初始化程序必須執(zhí)行兩次才能夠初始化成功,為什么?

    最近在調(diào)試ADS1259這個(gè)片子,發(fā)現(xiàn)初始化程序必須執(zhí)行兩次才能夠初始化成功,然后讀出來(lái)的CONFIG0寄存器的最高位是“0”(官方文檔上是“1”),不知道是什么原因,求TI工程師解答呀!
    發(fā)表于 01-10 12:41

    STM32F407 MCU使用SD NAND?不斷電初始化失效解決方案

    STM32F407微控制器單元(MCU)與SD NAND的結(jié)合提供了強(qiáng)大的存儲(chǔ)解決方案。然而,不斷電初始化失效問(wèn)題可能會(huì)導(dǎo)致系統(tǒng)穩(wěn)定性和數(shù)據(jù)完整性受損。我們將STM32F407與SD NAND集成時(shí)可能遇到的初始化問(wèn)題,并提供專業(yè)的解決方案。
    的頭像 發(fā)表于 12-11 10:51 ?430次閱讀
    STM32F407 MCU使用SD NAND?不斷電<b class='flag-5'>初始化</b>失效解決方案

    基于旋轉(zhuǎn)平移解耦框架的視覺慣性初始化方法

    精確和魯棒的初始化對(duì)于視覺慣性里程計(jì)(VIO)至關(guān)重要,因?yàn)椴涣嫉?b class='flag-5'>初始化會(huì)嚴(yán)重降低姿態(tài)精度。
    的頭像 發(fā)表于 11-01 10:16 ?426次閱讀
    基于旋轉(zhuǎn)平移解耦框架的視覺慣性<b class='flag-5'>初始化</b>方法

    TMS320C6000 McBSP初始化

    電子發(fā)燒友網(wǎng)站提供《TMS320C6000 McBSP初始化.pdf》資料免費(fèi)下載
    發(fā)表于 10-26 10:10 ?0次下載
    TMS320C6000 McBSP<b class='flag-5'>初始化</b>

    視頻引擎初始化失敗怎么回事

    視頻引擎初始化失敗是一個(gè)常見的技術(shù)問(wèn)題,它可能由多種原因引起,包括軟件沖突、硬件問(wèn)題、驅(qū)動(dòng)程序問(wèn)題、系統(tǒng)設(shè)置錯(cuò)誤等。要解決這個(gè)問(wèn)題,需要對(duì)可能的原因進(jìn)行詳細(xì)的分析和診斷。 1. 軟件沖突 1.1
    的頭像 發(fā)表于 09-18 18:18 ?1512次閱讀

    linux驅(qū)動(dòng)程序主要有哪些功能

    Linux驅(qū)動(dòng)程序是操作系統(tǒng)與硬件設(shè)備之間進(jìn)行通信的橋梁,負(fù)責(zé)實(shí)現(xiàn)硬件設(shè)備與操作系統(tǒng)之間的數(shù)據(jù)交換和控制。Linux驅(qū)動(dòng)程序的主要功能包括以下幾個(gè)方面: 設(shè)備識(shí)別與初始化 Linux驅(qū)
    的頭像 發(fā)表于 08-30 14:47 ?452次閱讀

    如何看懂檢測(cè)設(shè)備程序邏輯

    的地方,通常是主函數(shù)(main function)或啟動(dòng)函數(shù)(startup function)。在程序入口處,通常會(huì)進(jìn)行一些初始化操作,如初始化全局變量、配置硬件設(shè)備等。 程序主體
    的頭像 發(fā)表于 07-17 16:50 ?501次閱讀

    STM32H750在-40℃環(huán)境下程序在串口初始化階段跑飛了怎么處理?

    STM32H750,主頻設(shè)置為400MHz,常溫下可以正常工作,低溫-40℃時(shí),程序初始化階段跑飛,用仿真器連接進(jìn)行調(diào)試,單步運(yùn)行在串口初始化函數(shù)處報(bào)錯(cuò): Target
    發(fā)表于 07-04 06:35

    esp32調(diào)試MQTT的程序,如何對(duì).host初始化?

    我現(xiàn)在在調(diào)試MQTT的程序,用到idf里面的esp-idf/examples/protocols/mqtt/tcp例程,在mqtt_app_start里面初始化
    發(fā)表于 06-11 07:55

    如何知道DAM是否已在啟動(dòng)SW時(shí)初始化

    嗨, 我有一個(gè)與默認(rèn)應(yīng)用程序內(nèi)存有關(guān)的問(wèn)題。 問(wèn)題是如何知道 DAM 是否已在啟動(dòng) SW 時(shí)初始化?
    發(fā)表于 05-22 06:42

    bootloader開多線程做引導(dǎo)程序,跳app初始化后直接進(jìn)hardfualt,為什么?

    過(guò)是沒有什么問(wèn)題的,在做IAP跳app時(shí)發(fā)現(xiàn)多線程iap跳多線程app一跳進(jìn)去做完初始化就進(jìn)hardfault,然后單任務(wù)IAP跳多線程APP時(shí)程序跳進(jìn)去都能正常執(zhí)行這個(gè)有大神了解嗎,有想要源碼研究的我就貼出來(lái)。
    發(fā)表于 04-18 06:07

    字符型、指針型等變量等該如何初始化

     對(duì)于數(shù)值類型的變量往往初始化為0,但對(duì)于其他類型的變量,如字符型、指針型等變量等該如何初始化呢?
    的頭像 發(fā)表于 03-18 11:02 ?1608次閱讀

    STM32MP135使用SD卡啟動(dòng)應(yīng)用程序,應(yīng)用程序是需要在DDR運(yùn)行,DDR初始化,已經(jīng)在FSBL鏡像里面嗎?

    使用SD卡啟動(dòng)應(yīng)用程序,應(yīng)用程序是需要在DDR運(yùn)行,DDR初始化,已經(jīng)在FSBL鏡像里面嘛 求大佬指點(diǎn)
    發(fā)表于 03-11 08:31

    MCU單片機(jī)GPIO初始化該按什么順序配置?為什么初始化時(shí)有電平跳變?

    GPIO初始化時(shí)有時(shí)鐘配置、模式配置、輸出配置、復(fù)用配置,那么在編寫初始化代碼時(shí),到底該按什么順序執(zhí)行呢?如果順序不當(dāng)那初始化過(guò)程可能會(huì)出現(xiàn)短暫的電平跳變。
    的頭像 發(fā)表于 02-22 11:07 ?1642次閱讀
    MCU單片機(jī)GPIO<b class='flag-5'>初始化</b>該按什么順序配置?為什么<b class='flag-5'>初始化</b>時(shí)有電平跳變?

    什么是單板機(jī)的監(jiān)控程序?

    初始化程序:用于設(shè)置單片機(jī)的初始狀態(tài),包括初始化寄存器、設(shè)置中斷向量、啟動(dòng)時(shí)鐘等。   主循環(huán)程序:監(jiān)控
    的頭像 發(fā)表于 02-02 17:15 ?1422次閱讀
    什么是單板機(jī)的監(jiān)控<b class='flag-5'>程序</b>?
    主站蜘蛛池模板: 国产精品欧美久久久久天天影视 | www.中文字幕在线观看 | 超碰97人人做人人爱少妇 | 日本孕妇大胆孕交 | 豆奶视频在线高清观看 | 97久久伊人精品影院 | 妓女嫖客叫床粗话对白 | 嫩草影院成人 | 亚洲卫视论坛 | 竹菊精品久久久久久久99蜜桃 | 亚洲精品AV无码永久无码 | 久久6699精品国产人妻 | 日本漫画无彩翼漫画 | 诱人的女邻居9中文观看 | 人人看人人看 | 久久精品热老司机 | 久久综合中文字幕无码 | 动漫美女人物被黄漫在线看 | 69国产精品成人无码视频 | 亚洲精品乱码8久久久久久日本 | 亚洲国产精品嫩草影院永久 | 亚洲高清国产拍精品5g | 入禽太深免费高清在线观看5 | 芳草地社区在线视频 | 嘟嘟嘟在线视频免费观看高清中文 | 久久久无码精品无码国产人妻丝瓜 | 在线播放免费人成视频 | 男人电影天堂手机 | 精品夜夜澡人妻无码AV蜜桃 | 国产AV天堂一区二区三区 | 视频区 国产 欧美 日韩 | 翁止熄痒禁伦短文合集免费视频 | 国内卡一卡二卡三免费网站 | np高h肉辣一女多男 no视频在线观看 | 能看的黄页最新网站 | 最新国产三级在线不卡视频 | 亚洲色欲啪啪久久WWW综合网 | 亚洲国产综合人成综合网站00 | 在线不卡中文字幕 | 亚洲欧美综合视频 | 免费国产成人高清在线观看视频 |