久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3844|回復: 13
打印 上一主題 下一主題
收起左側(cè)

使用chatGPT寫單片機程序

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:309610 發(fā)表于 2023-4-22 12:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
趕一波AI的熱潮,最近chat GPT超火,就體驗了一下用AI自動生成代碼,太強悍了也有不足的地方

我使用的是第三方接口的chat gpt 3.5。真是學習編程的神器。

51hei.jpg (237.33 KB, 下載次數(shù): 79)

51hei.jpg

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發(fā)
ID:309610 發(fā)表于 2023-4-22 13:03 | 只看該作者

51hei2.jpg (249.58 KB, 下載次數(shù): 85)

51hei2.jpg

51hei1.jpg (247.14 KB, 下載次數(shù): 76)

51hei1.jpg
回復

使用道具 舉報

板凳
ID:309610 發(fā)表于 2023-4-22 20:22 來自手機 | 只看該作者
以下是一個結(jié)合了零點滿度校正、多點線性校正、使用二階低通巴特沃斯濾波器和溫度模糊PID控制的51單片機程序

  1. #include <reg51.h>

  2. #define ADC_CS P1_0
  3. #define ADC_CLK P1_1
  4. #define ADC_DIN P1_2
  5. #define ADC_DOUT P1_3

  6. // 巴特沃斯濾波器參數(shù)
  7. float b0 = 0.0025; // b0系數(shù)
  8. float b1 = 0.005; // b1系數(shù)
  9. float b2 = 0.0025; // b2系數(shù)
  10. float a1 = -1.8227; // a1系數(shù)
  11. float a2 = 0.8316; // a2系數(shù)

  12. // 狀態(tài)變量
  13. float x[2] = {0.0, 0.0}; // 巴特沃斯濾波器輸入狀態(tài)變量
  14. float y[2] = {0.0, 0.0}; // 巴特沃斯濾波器輸出狀態(tài)變量

  15. // PID控制參數(shù)
  16. float kp = 0.0; // 比例系數(shù)
  17. float ki = 0.0; // 積分系數(shù)
  18. float kd = 0.0; // 微分系數(shù)

  19. // 模糊PID控制參數(shù)
  20. float e_last = 0.0; // 上一次誤差
  21. float ec[3] = {0.0, 0.0, 0.0}; // 誤差變化率數(shù)組
  22. float u[3] = {0.0, 0.0, 0.0}; // 控制量變化率數(shù)組
  23. float u_out = 0.0; // 控制量輸出

  24. // 延時函數(shù)
  25. void delay(unsigned int n)
  26. {
  27.     unsigned int i;
  28.     while (n--)
  29.     {
  30.         for (i = 0; i < 1000; i++);
  31.     }
  32. }

  33. // 發(fā)送24位指令并讀取16位數(shù)據(jù)
  34. unsigned int adc_read(void)
  35. {
  36.     unsigned char i;
  37.     unsigned int data = 0;

  38.     // 發(fā)送指令
  39.     ADC_CS = 0;
  40.     ADC_CLK = 0;
  41.     ADC_DIN = 1;
  42.     delay(1);
  43.     ADC_CLK = 1;
  44.     delay(1);
  45.     ADC_CLK = 0;
  46.     delay(1);
  47.     ADC_DIN = 1;
  48.     delay(1);
  49.     ADC_CLK = 1;
  50.     delay(1);
  51.     ADC_CLK = 0;
  52.     delay(1);

  53.     // 讀取數(shù)據(jù)
  54.     for (i = 0; i < 24; i++)
  55.     {
  56.         if (i < 16)
  57.         {
  58.             data <<= 1;
  59.             ADC_CLK = 1;
  60.             delay(1);
  61.             ADC_CLK = 0;
  62.             delay(1);
  63.             data |= ADC_DOUT;
  64.             delay(1);
  65.         }
  66.         else
  67.         {
  68.             ADC_DIN = 0;
  69.             ADC_CLK = 1;
  70.             delay(1);
  71.             ADC_CLK = 0;
  72.             delay(1);
  73.             ADC_DIN = 1;
  74.             delay(1);
  75.         }
  76.     }

  77.     ADC_CS = 1;
  78.     return data;
  79. }

  80. // 零點滿度校正
  81. void adc_zero_full_calibration(void)
  82. {
  83.     unsigned int zero_code, full_code;

  84.     // 獲取零點碼值
  85.     ADC_CS = 0;
  86.     delay(1);
  87.     zero_code = adc_read();
  88.     ADC_CS = 1;

  89.     // 獲取滿量程碼值
  90.     ADC_CS = 0;
  91.     delay(1);
  92.     full_code = adc_read();
  93.     ADC_CS = 1;

  94.     // 計算比例和偏移
  95.     float k = 4096.0 / (full_code - zero_code); // 計算比例系數(shù)
  96.     float b = -zero_code * k; // 計算偏移量
  97. }

  98. // 多點線性校正
  99. void adc_multi_point_calibration(void)
  100. {
  101.     unsigned char i;
  102.     unsigned int code[5] = {0x0000, 0x1000, 0x2000, 0x3000, 0x4000};
  103.     float volt[5] = {0.0, 1.0, 2.0, 3.0, 4.0};
  104.     float k[4], b[4];

  105.     for (i = 0; i < 4; i++)
  106.     {
  107.         k[i] = (volt[i + 1].volt[i]) / (code[i + 1] - code[i]); // 計算比例系數(shù) b[i] = volt[i] - k[i] * code[i]; // 計算偏移量 } }
  108. // 將電壓轉(zhuǎn)換為溫度,根據(jù)具體傳感器進行修改
  109. float voltage_to_temperature(float voltage)
  110. {
  111. float temperature = (voltage - 0.5) * 100; // 線性轉(zhuǎn)換
  112. return temperature;
  113. }

  114. // 二階低通巴特沃斯濾波器
  115. float butterworth_filter(float input)
  116. {
  117. float output = b0 * input + b1 * x[0] + b2 * x[1] - a1 * y[0] - a2 * y[1]; // 計算輸出值

  118. // 更新狀態(tài)變量
  119. x[1] = x[0]; // 將當前輸入值保存到x[1]中,用于下一次迭代時計算b1
  120. x[0] = input; // 用當前輸入值更新x[0]
  121. y[1] = y[0]; // 將當前輸出值保存到y(tǒng)[1]中,用于下一次迭代時計算a1
  122. y[0] = output; // 用當前輸出值更新y[0]

  123. return output;
  124. }

  125. // 模糊PID控制函數(shù)
  126. float fuzzy_pid_control(float setpoint, float process_value)
  127. {
  128. float e = setpoint - process_value; // 計算誤差
  129. float ec_now = e - e_last; // 計算當前誤差變化率

  130. // 計算當前權(quán)重
  131. float w_e = 0.5; // 誤差權(quán)重
  132. float w_ec = 0.3; // 誤差變化率權(quán)重
  133. float w_u = 0.2; // 控制量變化率權(quán)重

  134. // 計算模糊控制量
  135. ec[2] = ec[1]; ec[1] = ec[0]; ec[0] = ec_now; // 更新誤差變化率數(shù)組
  136. u[2] = u[1]; u[1] = u[0]; // 更新控制量變化率數(shù)組
  137. u[0] = kp * (w_e * e + w_ec * (ec_now + ec[1] + ec[2]) + w_u * (u[1] + u[2])) + // 計算P項
  138.        ki * (w_e * e + w_ec * ec_now + w_u * u[0]) + // 計算I項
  139.        kd * (w_e * e + w_ec * (ec_now - ec[1]) + w_u * (u[0] - u[1])); // 計算D項

  140. // 更新上一次誤差
  141. e_last = e;

  142. // 輸出控制量
  143. return u_out;
  144. }

  145. void main()
  146. {
  147. float setpoint = 25.0; // 設定溫度

  148. // 零點滿度校正
  149. adc_zero_full_calibration();

  150. // 多點線性校正
  151. adc_multi_point_calibration();

  152. while (1)
  153. {
  154.     // 抗干擾濾波 --> 巴特沃斯濾波器
  155.     unsigned int adc_result = adc_read(); // 獲取ADC采樣值
  156.     float voltage = (float)adc_result * k + b; // 轉(zhuǎn)換為電壓
  157.     float temperature = voltage_to_temperature(voltage); // 將電壓轉(zhuǎn)換為溫度
  158.     float filtered_temp = butterworth_filter(temperature); // 進行抗干擾濾波

  159.     // 模糊PID控制
  160.     float output = fuzzy_pid_control(setpoint, filtered_temp);

  161.     // 輸出控制信號
  162.     // TODO: your code here
  163. }
  164. }
復制代碼


該程序基于51單片機,使用巴特沃斯濾波器對采集到的溫度數(shù)據(jù)進行抗干擾濾波,并使用模糊PID控制算法來實現(xiàn)溫度控制。

在主函數(shù)中,我們首先進行了零點滿度校正和多點線性



2023/4/22 11:11:34

繼續(xù)

2023/4/22 11:12:00

校正,以提高ADC采樣值的精度。在校正之后,程序進入了一個死循環(huán)中,不斷地從ADC獲取溫度采樣值,并進行濾波和控制。

抗干擾濾波部分使用了二階低通巴特沃斯濾波器。該濾波器有五個參數(shù):b0、b1、b2、a1、a2。其中,b0、b1、b2是濾波器輸入狀態(tài)變量與輸出狀態(tài)變量的系數(shù),a1、a2是濾波器輸出狀態(tài)變量的系數(shù)。這些系數(shù)可以根據(jù)具體的要求進行調(diào)整,以達到不同的濾波效果。

模糊PID控制部分使用了模糊邏輯來處理誤差、誤差變化率和控制量變化率,以計算出控制量。該算法有四個參數(shù):kp、ki、kd、w_e、w_ec、w_u。其中,kp、ki、kd是比例、積分、微分系數(shù),w_e、w_ec、w_u是三個變量的權(quán)重系數(shù)。這些參數(shù)可以根據(jù)具體的需要進行調(diào)整,以達到更好的控制效果。

最后,程序通過輸出控制信號實現(xiàn)對溫度的控制。需要注意的是,在實際應用中,我們需要將控制信號轉(zhuǎn)換為對應的電氣信號,并控制溫度調(diào)節(jié)器來實現(xiàn)溫度的控制。

51hei2.jpg (60.1 KB, 下載次數(shù): 80)

51hei2.jpg

51hei.jpg (60.06 KB, 下載次數(shù): 73)

51hei.jpg

51hei1.jpg (51.45 KB, 下載次數(shù): 76)

51hei1.jpg
回復

使用道具 舉報

地板
ID:61207 發(fā)表于 2023-4-25 07:34 | 只看該作者
guobaox1981 發(fā)表于 2023-4-22 20:22
以下是一個結(jié)合了零點滿度校正、多點線性校正、使用二階低通巴特沃斯濾波器和溫度模糊PID控制的51單片機程 ...

人工智能
回復

使用道具 舉報

5#
ID:514317 發(fā)表于 2023-4-25 09:45 | 只看該作者
那里的AI應用??我也想試下
回復

使用道具 舉報

6#
ID:879348 發(fā)表于 2023-4-25 10:16 | 只看該作者
實際完全無法運行
回復

使用道具 舉報

7#
ID:309610 發(fā)表于 2023-4-27 10:02 來自手機 | 只看該作者
AI寫的程序不修改肯定是無法直接運行的,我們重點是提出要求ai給出解法,我們利用它給的架構(gòu),思路和算法做成子程序然后移植到相應硬件上,說白了是我們直接從億萬程序員的成果中抄答案
回復

使用道具 舉報

8#
ID:114694 發(fā)表于 2023-4-27 10:58 來自手機 | 只看該作者
學習了,時代進步太快了,我輩難以追趕
回復

使用道具 舉報

9#
ID:398219 發(fā)表于 2023-4-28 10:36 | 只看該作者
確實牛逼
回復

使用道具 舉報

10#
ID:91165 發(fā)表于 2023-4-28 12:42 | 只看該作者
也問chat gpt要了2程序,編譯通過了還沒上機測試
回復

使用道具 舉報

11#
ID:373976 發(fā)表于 2023-5-5 18:40 | 只看該作者
我也測試過讓它寫代碼,還真像那么回事。我開始讓它寫個STC的1秒延時程序,他用的循環(huán)方式。然后我說用定時器方式寫個1秒延時程序,他竟然用的挺新的STC15.H的頭文件。寫的不錯,就是沒測試能不能通過
回復

使用道具 舉報

12#
ID:1065084 發(fā)表于 2023-5-8 11:12 | 只看該作者
實際用過才知道 GPT3.5絕大部分寫的代碼都不能直接用,還得調(diào)試,可以作為幫助工具,但不能直接用。據(jù)說GPT4的好一點,但是我沒花那20刀。
最近在用gpt查文獻,真的就是傻,他給的文獻在期刊中根本沒有,都是瞎蒙的。如果有GPT的人可以試試 類似如下的話語: 我不太了解89C51的定時器,請給我?guī)讉參考網(wǎng)頁 參考文獻 ,這樣的網(wǎng)頁都打不開,文獻根本都不存在。

這玩意僅僅是個語言模型 我現(xiàn)在就用他找錯別字
回復

使用道具 舉報

13#
ID:341045 發(fā)表于 2023-5-8 15:41 | 只看該作者
謝謝分享, 以后寫程序沒恩路了試一下
回復

使用道具 舉報

14#
ID:309610 發(fā)表于 2023-5-8 21:31 | 只看該作者
  確實GPT寫的代碼不能直接使用,GPT4也確實比GPT3.5好用,重點在4的理解能力超強。我現(xiàn)在一直在試用新版bing,新版bing就是免費GPT4,可惜限制很多,對話只能20次超過就要重新開始刷新。上傳代碼字數(shù)限制,一次只能上傳很少。我沒學過C語言,只看過基本單片機教程,
  現(xiàn)在做法就是想設計一個函數(shù)把想法告訴GPT4然后他生成基本架構(gòu)代碼,看看是否試用然后讓他添加其他功能,修改參數(shù)。最終得到大致框架算法。他很多思路是看教程和別人代碼是從沒見過的,遇到不懂得代碼就讓他詳細解釋和注釋,這方面確實超強。是學習的利器
  這幾天讓AI幫做一個編碼器調(diào)參程序,程序?qū)σ话愠绦騿T沒啥難度但沒有AI之前對我確實超難
對應一個完整系統(tǒng)必須的一環(huán),使用編碼器或按鍵輸入,識別快慢反正等,分菜單模式和調(diào)參模式。能夠完成多種類型參數(shù)char ,uchar ,int,uint,long,float修改保存,要調(diào)整方便快速界面簡單。可以和多級菜單系統(tǒng)中參數(shù)表對接。方便移植,適用各種顯示器件,找很久也沒找到合用的。只好自己編。
   在AI幫助下核心代碼都已完成。正在最后組合調(diào)試封裝。做好會發(fā)出來。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区四区hd | 玖玖在线免费视频 | 激情毛片| 自拍视频精品 | 99热在这里只有精品 | 成人在线精品视频 | 91福利电影在线观看 | 极品销魂美女一区二区 | 精品二区| 中文字幕一区二区三区乱码图片 | 亚洲在线一区 | www日本高清视频 | 日韩中文字幕在线观看 | 成人精品毛片国产亚洲av十九禁 | 盗摄精品av一区二区三区 | 欧美久久久久久久久中文字幕 | 亚洲欧美日韩一区二区 | wwwxxx国产| 日韩中文字幕 | 视频在线亚洲 | 中文字幕在线观看成人 | 不卡的av一区 | 日韩精品在线免费观看视频 | 成人免费观看男女羞羞视频 | 男人电影天堂 | 成人免费视频网站在线观看 | 亚洲日韩中文字幕一区 | 99热这里有精品 | 久久免费精彩视频 | 一区二区免费看 | 综合色播 | 国产综合精品一区二区三区 | 国产精品一区二区久久 | 国产精品一区二区视频 | 爱爱视频在线观看 | 欧美极品视频在线观看 | 四虎影院在线观看av | 欧美成人激情视频 | 精品国产伦一区二区三区观看体验 | 欧美一级欧美三级在线观看 | 国产在线精品一区二区三区 |