第一部分:
針對樹莓派4b操作系統,需要安裝不同于2,3系列的安裝包。由于4b有運行內存 1g,2g,4g,8g多個版本。由于支持4g以上內存的系統必須是64位系統。所以4g,8g需要選擇64位系統。
centos操作系統也一樣,需要使用和3b,3b+不同的安裝包。
附件分享一個操作系統可用的4b的操作系統下載地址:
下面是32位系統,支持1g,2g版本
一.鏈接:https://pan.baidu.com/s/1zeTyMqfjykX9AVbvKz60oQ?
提取碼:gh8g?
二.sd卡格式化,需要使用SDCardFormatterv5_WinEN;
三. 燒錄系統需要使用balenaEtcher-Setup-1.4.7-x64?
具體下載地址:鏈接: https://pan.baidu.com/s/1vMlymt-DllyARvEry8Y0vQ 提取碼: cguu
其他操作系統也可以從centos官網下載,centos8現在在4b-4g上能啟動,不過進入不了系統。這個是需要注意的。
8g版本需要使用下面的連接:
鏈接: https://pan.baidu.com/s/1xyYFAh4vftg-37r_f2m7ZQ 提取碼: 48hw
購買樹莓派并安裝操作系統成功以后,進入第二部分
第二部分:
我們知道樹莓派提供一個硬件pwm引腳,可以通過脈沖寬度調制進行控制電機的速度。實際上在精度要求不是非常高的情況下,普通引腳也可以通過軟件模擬來控制電機,實現pwm一樣的功能。
一.準備
樹莓派4b
電機驅動L298N
直流電機
電源盒(4節1.5v電池)
電源線若干
二.電路連接示意圖
使用方式如下:
![watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW9femc=,size_16,color_FFFFFF,t_70](http://file.elecfans.com/web1/M00/C5/97/pIYBAF9IoLaAFp2FAALrkLu_9eU294.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW9femc=,size_16,color_FFFFFF,t_70)
https://shumeipai.nxez.com/raspberry-pi-pins-version-40
L298N示意圖
![watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW9femc=,size_16,color_FFFFFF,t_70](http://file.elecfans.com/web1/M00/C5/97/pIYBAF9IoLiAGRd-AAb-vW7VC8Q543.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW9femc=,size_16,color_FFFFFF,t_70)
詳細的針腳
![watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW9femc=,size_16,color_FFFFFF,t_70](http://file.elecfans.com/web1/M00/C5/1F/o4YBAF9IoLuALCgzAAc4FwYxFLo759.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW9femc=,size_16,color_FFFFFF,t_70)
![watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW9femc=,size_16,color_FFFFFF,t_70](http://file.elecfans.com/web1/M00/C5/1F/o4YBAF9IoLyAQKv3AAF8alk0fwY156.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW9femc=,size_16,color_FFFFFF,t_70)
其中,IN1,IN2控制電機A,IN3,IN4控制電機B
L298N12符輸入,接電源盒正極;L298N的GND接電源盒的負極,同時接樹莓派GND,以實現共地。
電路連接設計思路:使用gpio 1控制IN1;GUIO 02控制IN2;GPIO29控制ENA(A通道使能;通過使能接口接成pwm模式,控制速度)。
關于跳線帽:
關于ENA和ENB鍵帽,拆下后ENA和ENB分別有兩根線,與IN1-4平行的是ENA和ENB使能端,剩下的是5V電源針腳。由于必須在ENA或ENB處于高電平時,才能使相應的電機運轉,所以通過鍵帽把它們默認接到5V電源上,使之默認為高電平。
故若只需控制電機的正反轉,可以不用管鍵帽,只關心IN1-4即可。若要對電機進行調速,則需拆下鍵帽,對ENA和ENB使能端輸入PWM脈沖,而剩下的5V電源針腳空閑即可。
不知道你買的是什么型號的L298N。有些型號標記了EA、EB和5V,就算沒標記也沒關系,自己實際試一下就知道了。
實際上,可以用萬用表測試一下兩個針腳的電壓,如果紅色的(萬用表的正極)連接的一端顯示出來的數字是正數,那么這端就是高電壓(實際測試下來是2v,不到5v).所以在將低電壓的那一段外接到樹莓派即可。
測試下來,我買的紅板,是靠近字符 ENA這邊更近的那根針是需要外接的,是低電平。
https://www.zhihu.com/question/50074435/answer/140589620
?
三。程序
原理:GPIO使用GPIO模式進行工作,通過GPIO接口,設置脈沖幅度數值(默認值是100,通過調整數值來控制電流的強弱,從而控制電機的運動速度)。
官網的例子
?
/*?*?#%L?*?**********************************************************************?*?ORGANIZATION??:??Pi4J?*?PROJECT???????:??Pi4J?::?Java?Examples?*?FILENAME??????:??SoftPwmExample.java?*?*?This?file?is?part?of?the?Pi4J?project.?More?information?about?*?this?project?can?be?found?here:??http://www.pi4j.com/?*?**********************************************************************?*?%%?*?Copyright?(C)?2012?-?2019?Pi4J?*?%%?*?This?program?is?free?software:?you?can?redistribute?it?and/or?modify?*?it?under?the?terms?of?the?GNU?Lesser?General?Public?License?as?*?published?by?the?Free?Software?Foundation,?either?version?3?of?the?*?License,?or?(at?your?option)?any?later?version.?*?*?This?program?is?distributed?in?the?hope?that?it?will?be?useful,?*?but?WITHOUT?ANY?WARRANTY;?without?even?the?implied?warranty?of?*?MERCHANTABILITY?or?FITNESS?FOR?A?PARTICULAR?PURPOSE.??See?the?*?GNU?General?Lesser?Public?License?for?more?details.?*?*?You?should?have?received?a?copy?of?the?GNU?General?Lesser?Public?*?License?along?with?this?program.??If?not,?see?*?.?*?#L%?*/import?com.pi4j.io.gpio.*;import?com.pi4j.platform.PlatformAlreadyAssignedException;import?com.pi4j.util.CommandArgumentParser;import?com.pi4j.util.Console;/**?*?
?*?This?example?code?demonstrates?how?to?setup?a?software?emulated?PWM?pin?using?the?RaspberryPi?GPIO?pins.?*?
?*?*?@author?Robert?Savage?*/public?class?SoftPwmExample?{/**?????*?[ARGUMENT/OPTION?"--pin?(#)"?|?"-p?(#)"?]?????*?This?example?program?accepts?an?optional?argument?for?specifying?the?GPIO?pin?(by?number)?????*?to?use?with?this?GPIO?listener?example.?If?no?argument?is?provided,?then?GPIO?#1?will?be?used.?????*?--?EXAMPLE:?"--pin?4"?or?"-p?0".?????*?????*?@param?args?????*?@throws?InterruptedException?????*?@throws?PlatformAlreadyAssignedException?????*/public?static?void?main(String[]?args)?throws?InterruptedException,?PlatformAlreadyAssignedException?{//?create?Pi4J?console?wrapper/helper//?(This?is?a?utility?class?to?abstract?some?of?the?boilerplate?code)final?Console?console?=?new?Console();//?print?program?title/headerconsole.title("<--?The?Pi4J?Project?-->",?"SoftPWM?Example?(Software-driven?PWM?Emulation)");//?allow?for?user?to?exit?program?using?CTRL-Cconsole.promptForExit();//?create?gpio?controllerfinal?GpioController?gpio?=?GpioFactory.getInstance();//?by?default?we?will?use?gpio?pin?#01;?however,?if?an?argument//?has?been?provided,?then?lookup?the?pin?by?addressPin?pin?=?CommandArgumentParser.getPin(RaspiPin.class,????//?pin?provider?class?to?obtain?pin?instance?fromRaspiPin.GPIO_01,??//?default?pin?if?no?pin?argument?foundargs);?????????????//?argument?array?to?search?in//?we?will?provision?the?pin?as?a?software?emulated?PWM?output//?pins?that?support?hardware?PWM?should?be?provisioned?as?normal?PWM?outputs//?each?software?emulated?PWM?pin?does?consume?additional?overhead?in//?terms?of?CPU?usage.////?Software?emulated?PWM?pins?support?a?range?between?0?(off)?and?100?(max)?by?default.////?Please?see:?http://wiringpi.com/reference/software-pwm-library///?for?more?details?on?software?emulated?PWMGpioPinPwmOutput?pwm?=?gpio.provisionSoftPwmOutputPin(pin);//?optionally?set?the?PWM?range?(100?is?default?range)pwm.setPwmRange(100);//?prompt?user?that?we?are?readyconsole.println("?...?Successfully?provisioned?PWM?pin:?"?+?pwm.toString());console.emptyLine();//?set?the?PWM?rate?to?100?(FULLY?ON)pwm.setPwm(100);console.println("Software?emulated?PWM?rate?is:?"?+?pwm.getPwm());console.println("Press?ENTER?to?set?the?PWM?to?a?rate?of?50");System.console().readLine();//?set?the?PWM?rate?to?50?(1/2?DUTY?CYCLE)pwm.setPwm(50);console.println("Software?emulated?PWM?rate?is:?"?+?pwm.getPwm());console.println("Press?ENTER?to?set?the?PWM?to?a?rate?to?0?(stop?PWM)");System.console().readLine();//?set?the?PWM?rate?to?0?(FULLY?OFF)pwm.setPwm(0);console.println("Software?emulated?PWM?rate?is:?"?+?pwm.getPwm());//?stop?all?GPIO?activity/threads?by?shutting?down?the?GPIO?controller//?(this?method?will?forcefully?shutdown?all?GPIO?monitoring?threads?and?scheduled?tasks)gpio.shutdown();}}
?
?
其中console是java控制臺,打日志用的,方便調試。
?
//?by?default?we?will?use?gpio?pin?#01;?however,?if?an?argument//?has?been?provided,?then?lookup?the?pin?by?addressPin?pin?=?CommandArgumentParser.getPin(RaspiPin.class,????//?pin?provider?class?to?obtain?pin?instance?fromRaspiPin.GPIO_01,??//?default?pin?if?no?pin?argument?foundargs);?????????????//?argument?array?to?search?in
這里的含義是,如果輸入控制引腳,則使用輸入的引腳,如果不輸入,就使用默認的GPIO_01引腳
具體程序,可以根據例子,進行設置針腳的高低電平實現
?
需要源碼請關注專欄,留言
評論