요즘 매니아들은 BLDC(Brushless DC) 제어에 많은 관심을 갖고 있습니다.
기존 DC 모터에 비해 모터 성능이 향상되고 에너지 효율도 향상되었지만 사용하기가 더 어렵습니다. 많은 기성 제품이 존재합니다.
이러한 목적을 위해
예를 들어, RC 항공기에 매우 잘 작동하는 소형 BLDC 컨트롤러가 많이 있습니다.
BLDC 제어를 더 깊이 조사하려는 사람들을 위해 일반적으로 매우 유용한 문서가 있는 산업 사용자를 위한 다양한 마이크로 컨트롤러 및 기타 전자 하드웨어도 있습니다.
지금까지 BLDC 제어를 위해 Arduino 마이크로 컨트롤러를 사용하는 방법에 대한 포괄적인 설명을 찾지 못했습니다.
또한 회생제동을 하거나, BLDC를 발전용으로 활용하는 것에 관심이 있으시다면 소형 모터에 적합한 제품을 많이 찾지 못했고, 3상 발전기를 제어하는 방법도 접하지 못했습니다.
이 구조는 원래 실시간 계산에 대한 이야기에 있었는데
, 강좌가 끝난 후에도 계속해서 사용합니다.
이 프로젝트의 아이디어는 플라이휠 에너지 저장 및 회생 제동 기능을 갖춘 하이브리드 자동차의 비례 모델을 보여주는 것입니다.
프로젝트에 사용된 모터는 손상된 컴퓨터 하드 드라이브에서 청소된 소형 BLDC입니다. 본 매뉴얼은
Arduino 마이크로컨트롤러와 Hall-Affects 위치 센서를 사용하는 방법을 설명합니다 .
주행 및 회생 제동 모드에서
oscillisoft를 방문하는 것은 필수는 아니지만 이 프로젝트를 완료하는 데 매우 도움이 됩니다.
범위에 액세스할 수 없는 경우 범위 없이 액세스하는 방법에 대한 몇 가지 제안 사항을 추가했습니다(5단계).
이 프로젝트에서 실제 모터 컨트롤러에 포함해서는 안되는 것 중 하나는 과전류 보호와 같은 안전 기능입니다.
사실 가장 나쁜 점은 HD 모터가 소진된다는 것입니다.
그러나 현재 하드웨어로 과전류 보호를 구현하는 것은 어렵지 않으며 언젠가는 구현하게 될 것입니다.
더 큰 모터를 제어하려는 경우 모터와 사용자의 안전을 보호하기 위해 과전류 보호 기능을 추가하십시오.
나는 \'실제\' 작업을 수행할 수 있는 더 큰 모터와 함께 이 컨트롤러를 사용하려고 하지만 아직 올바른 모터가 없습니다.
나는 eBay가 86W 자동차를 약 40달러에 팔았다는 것을 알아냈습니다.
좋은 후보인 것 같습니다.
자체 BLDC를 조립하는 키트를 판매하는 \'GoBrushless\'라는 RC 웹사이트도 있습니다.
가격은 그리 비싸지 않으며, 직접 만들어 볼 가치가 있습니다.
본 웹사이트에는 모터용 홀 센서가 없다는 점에 유의하시기 바랍니다. 아휴!
이 구조를 작성하는 것은 큰 작업입니다.
도움이 되셨기를 바라며, 의견과 제안을 부탁드립니다.
디지털 멀티미터(DMM) -
DMM에 주파수 측정기 오실로스코프가 있는 경우(
최소 2개 채널이 있는 것이 좋습니다)
T8 Torx 드라이버(
하드 드라이브를 열려면 그 중 하나가 필요합니다).
좋은 철물점이 있어요.
기계 작업장 및 신속한 프로토타입(
이것들은 매우 도움이 되지만 이 프로젝트는 그것들 없이도 완료될 수 있다고 생각합니다).
재료 컴퓨터 하드 디스크의 bldc 모터 자기 링(
모터의 절반)
다른 하드 드라이브에서 여러 개(3-6)
하드 디스크의 은색 디스크에 두 번째 작은 모터가 있습니다(DC 브러시 사용 가능)
고무 밴드 또는 (바람직하게)
다른 모터가 있는 손잡이가 있는 브러시리스 DC 모터 전자 빵판 단선 월 Arduino Duemilanove 120k ohm 저항기 6 ~ 400ohm 저항기 선형 또는 회전 전위차계100k ohmST 마이크로 회로 L6234 3상 모터 드라이버 IC 100uF 커패시터 2개 10nF 커패시터 1개 220nF 커패시터 1개 1uF 커패시터 1개 100uF 커패시터 3개 수신 다이오드 1개 2.
Honeywell SS411A 바이폴라 홀-5 앰프 퓨즈 1개 퓨즈 홀더 3
참고: Mike Anton은 이 설명서에 표시된 전력 전자 장치 및 홀 센서 회로를 대체할 제품을 설계하고 판매했습니다(
역전위 유도를 사용하여 제어됨).
사양 및 조달 정보는 다음 두 링크에서 찾을 수 있습니다. 이 프로젝트를 수행할 예정이라면 시간을 내어 BLDC의 작동 및 제어 방식을 철저히 이해하는 것이 좋습니다.
온라인에는 많은 참고 자료가 있습니다(
몇 가지 제안 사항은 아래 참조).
하지만 내 프로젝트에는 이해를 돕기 위한 몇 가지 차트와 표가 포함되어 있습니다.
다음은 이 프로젝트를 이해하는 데 가장 중요하다고 생각하는 개념 목록입니다. MOSFET 트랜지스터 3상 하프 브리지 6-
3단계 문장 감소
위상 모터의 펄스 폭 변조(PWM)Hall-
Microchip AVR443: 센서-일반 참조 DC 모터 디지털 위치 센서의 기본 원리
atmelbrusless DC 모터 제어를 기반으로 한 3상 브러시리스 DC 모터 제어
Flying Star Hall 센서의 위상 BLDC 모터 제어, 하드 드라이브 정리에 대한 좋은 비디오 모터인데 저자는 모터를 스테핑 모터로, 스테핑 모터로 구동하고 있는 것 같습니다. 데이터 시트, 애플리케이션 노트 및 구매 정보를 포함하여 l6234 모터 드라이브 IC의 BLDC에 대한 보다 구체적인 참조 웹페이지입니다.
하이브리드 전기 자동차 애플리케이션을 위한 PM 브러시리스 모터 드라이브의 무료 샘플입니다.
이것은 회생 제동 단계 변화의 순서를 설명하는 유일한 논문입니다.
이 논문은 전기 자동차의 회생 제동이 유용합니다. 여기서 몇 가지 숫자를 빌렸지만 회생이 어떻게 작동하는지 잘못 설명하고 있다고 생각합니다.
재활용 디스크 드라이브 모터를 사용하여 이 프로젝트를 진행한 이유는 통과하기 쉽고 BLDC로 제어되는 코드를 학습하고 안전 문제를 일으키지 않기 위해 작은 저전압 모터를 사용하는 것을 좋아하기 때문입니다.
또한 홀 센서의 자석 구성은
두 번째 모터의 자기 링(회전자)을 사용하여 매우 간단해집니다(4단계 참조).
홀 센서를 설치하고 교정하는 번거로움을 겪고 싶지 않다면(5-7단계)
홀 센서에 내장된 CD/DVD 드라이브 모터가 적어도 몇 개 있다는 것을 알고 있습니다.
모터에 약간의 회전 관성을 제공하고 약간의 부하를 주기 위해 모터에 5개의 하드 드라이브를 놓고 약간 강한 접착제로 부드럽게 접착한 다음 모터에 접착했습니다(
이로 인해 원래 프로젝트에서 플라이휠이 만들어졌습니다).
하드 드라이브에서 모터를 제거하려면 하우징 나사를 풀기 위해 T8 별 모양 드라이브가 필요합니다(
일반적으로 센터온 라벨의 스틱 뒤에 나사 2개가 숨겨져 있습니다).
그리고 모터를 제자리에 고정하는 내부 나사가 필요합니다. 헤드 리더(
도 제거해야 합니다.
사운드 서클 실행)
이렇게 하면 모터에 접근하기 위해 메모리 디스크를 꺼낼 수 있습니다.
또한 해당 모터에서 회전자를 제거하려면 두 번째 동일한 하드 드라이브 모터가 필요합니다(
내부에 자석이 있음).
모터를 분해하기 위해 회전자(위)
모터의 바이스를 잡고 고정자(아래)에 들어 올립니다.
드라이버 두 개는 180도 서로 떨어져 있습니다.
변형 없이 모터를 충분히 단단한 쌍으로 고정하는 것은 쉽지 않습니다.
나무 v-블록을 만들고 싶을 수도 있습니다 .
이 목적으로 사용되는
모터 상단에 편안하게 맞도록 선반의 자석 링에 구멍을 뚫었습니다.
선반을 사용할 수 없는 경우 강력 접착제를 사용하여 역회전자를 모터에 고정할 수 있습니다.
아래 그림 2와 3은 제가 분해한 모터 중 하나의 내부를 보여줍니다.
전반부에는(로터) 8개의 극이 있습니다(
플라스틱으로 감싼 자석).
후반부(고정자)에는
12개의 슬롯(권선)이 있습니다.
3개의 모터 위상 각각에는 직렬로 연결된 4개의 슬롯이 있습니다.
일부 HD 모터는 하단에 3개의 접점(위상당 1개의 접점)이 있고 다른 하나는 모터의 중앙 탭(
3개의 스테이지가 만나는 곳)입니다.
이 프로젝트에서는 중앙 탭이 필요하지 않지만 센서 없는 제어에 유용할 수 있습니다(
언젠가 센서 없는 제어에 대한 노트를 공개하고 싶습니다).
모터에 4개의 접점이 있는 경우 저항계로 위상을 식별할 수 있습니다.
중앙 탭과 위상 사이의 저항은 두 위상 사이의 저항의 절반입니다.
BLDC 모터에 관한 대부분의 문헌은 사다리 모양의 역전위 파형을 다루는 반면, 하드 드라이브 모터는 사인처럼 보이는 역전위를 갖는 것으로 보입니다(아래 참조).
내가 아는 한, 사인파 PWM으로 사인파 모터를 구동하면 효율이 다소 떨어질 수 있지만 잘 작동합니다.
모든 BLDC 모터와 마찬가지로 이 모터도 3상 하프 트랜지스터 브리지로 구성됩니다
(
아래 두 번째 사진 참조).
ST Micro(L6234) IC를 사용합니다 .
브리지로는 모터 드라이버라고도 알려진
L6234의 전기 연결은 8단계에 나와 있습니다.
아래 세 번째 사진은 모터 드라이버와 세 가지 모터 위상의 개략도를 보여줍니다.
모터가 시계 방향으로 작동하려면 스위치가 다음 순서로 만들어집니다(
첫 번째 문자는 상단 트랜지스터이고 두 번째 문자는 하단 트랜지스터)
: 1단계 2 3 4 5 6 시계 방향: CB, AB, AC, BC, BA, CA 반시계 방향: BC, BA, CA, CB, AB, AC 6-
단계 시퀀스에는 360의 '전기 각도'가 필요하지만 물리적 각도는 90입니다. 모터.
따라서 각 모터의 회전속도는 4배가 됩니다.
두 시퀀스는 동일한 것처럼 보이지만 6-
Step 시퀀스의 경우 CW의 경우 위상을 통과하는 전류 방향이 한 방향이고 CCW의 경우 전류 방향이 반대이기 때문에 동일하지 않습니다.
배터리 또는 전원 공급 장치의 전압을 모터 위상 중 하나에 적용하여 이를 직접 확인할 수 있습니다.
전압을 인가하면 모터가 한 방향으로 조금씩 움직이다가 정지합니다.
위의 순서 중 하나에서 위상 전압을 빠르게 변경할 수 있는 경우 모터를 수동으로 회전시킬 수 있습니다.
트랜지스터와 마이크로 컨트롤러는 이러한 모든 스위치를 매우 빠르게 완료하여 모터가 고속으로 작동할 때 초당 수백 번 전환합니다.
또한, 양상에 전압을 인가하면 모터가 조금씩 움직인 후 정지하므로 주의하시기 바랍니다.
이는 토크가 0이기 때문입니다.
아래 네 번째 사진에서 이를 확인할 수 있는데, 이는 한 쌍의 모터 위상의 역전위를 보여줍니다.
이것은 사인파입니다.
파동이 x-
샤프트를 통과할 때 이 단계에서 제공되는 토크는 0입니다. 6
단계 BLDC 상 변화 시퀀스에서는 결코 발생하지 않았습니다.
특정 위상의 토크가 낮아지기 전에 전력이 다른 위상 조합으로 전환됩니다.
대형 BLDC 모터는 일반적으로 모터 내부의 홀 센서로 제조됩니다.
그러한 모터가 있는 경우 이 단계를 건너뛸 수 있습니다.
또한 이미 홀 센서에 내장된 CD/DVD 드라이브 모터가 적어도 일부 있다는 것을 알고 있습니다.
모터가 회전하면 위치 감지를 위해 3개의 홀 센서가 사용되므로 적절한 순간에 위상 변화가 수행됩니다.
내 HD 모터는 최대 9000RPM(150Hz)까지 작동합니다.
휠당 24번의 변경이 있으므로 9000RPM에서는 기계가 280마이크로초마다 변경됩니다.
Arduino 마이크로 컨트롤러는 16MHz에서 작동하므로 각 클록 주기는 0.06마이크로초입니다.
문장 축약을 수행하는 데 몇 개의 클럭 사이클이 필요한지는 알 수 없지만, 100 클럭 사이클이 필요하더라도, 즉 문장 축약을 수행하는 데 5마이크로초가 소요됩니다.
HD 모터에는 홀 센서가 없으므로 모터 외부에 설치해야 합니다.
센서는 모터 회전에 대해 고정되어야 하며 모터 회전과 일치하는 일련의 극에 노출되어야 합니다.
내 해결책은 동일한 모터에서 자기 링을 제거하고 제어할 모터에 거꾸로 설치하는 것입니다. 그런 다음 이 자기 링 위에 3개의 홀 센서를 모터 샤프트(
에서 서로 30도 간격으로 설치했습니다 .
120도 전기 모터 회전)
My Hall 센서 홀더는 제가 가공한 알루미늄 부품 3개와 빠른 프로토타입으로 만든 플라스틱 부품 3개로 구성된 간단한 홀더로 구성됩니다.
이러한 도구가 없으면 위치를 표시하는 다른 방법을 찾는 것이 어렵지 않습니다.
홀 센서용 브래킷을 만드는 것은 더욱 어려울 것입니다.
가능한 작업 방법은 다음과 같습니다. 1.
올바른 크기의 플라스틱 트레이를 찾아 홀 센서를 조심스럽게 에폭시로 칠할 수 있습니다. 2.
자기 링의 반경과 동일한 원을 갖는 템플릿이 종이에 인쇄되고 세 개의 표시가 15도 3 떨어져 있습니다.
템플릿을 디스크에 붙인 다음 템플릿을 가이드로 사용하여 홀 센서 에폭시를 제자리에 조심스럽게 배치합니다.
이제 홀 센서가 모터에 설치되었으므로 아래 회로에 연결하고 DMM이나 오실로스코프를 사용하여 테스트하여 모터가 회전함에 따라 출력이 높아지거나 낮아지는지 확인하십시오.
Arduino의 5V 출력을 사용하여 5V 미만에서 이 센서를 실행합니다.
홀 센서의 출력은 높거나 낮습니다(1 또는 0).
남극을 느끼는지 북극을 느끼는지에 따라 달라집니다.
15도 떨어져 있기 때문에 자석이 그 아래에서 회전하고 45도마다 극성이 변경되므로 이 세 센서는 동시에 높거나 낮을 수 없습니다.
모터가 회전하면 센서 출력은 6-
다음 표와 같은 스텝 패턴입니다.
세 센서 중 하나가 모터 위상 변화 위치에서 정확하게 변경되도록 센서를 모터 동작과 정렬해야 합니다.
이 경우 첫 번째 홀 센서(H1)의 상승 에지는
C 조합(높음) 및 B(낮음)의 개방과 일치해야 합니다.
이는 브리지 회로의 트랜지스터 3과 5를 켜는 것과 같습니다.
오실로스코프를 사용하여 센서와 자석을 정렬합니다.
이를 위해서는 세 가지 범위 채널을 사용해야 합니다.
두 번째 모터의 벨트에 연결하여 모터를 회전시키고 두 상 조합(
A와 B, A와 C) 사이의 역전위를 측정합니다
. 이는 2개의 사인입니다.
아래 그림의 파동처럼
그런 다음 오실로스코프의 채널 3에 있는 홀 센서 2의 신호를 살펴보십시오.
홀 센서 홀더는 홀 센서의 상승 에지가 위상 변화가 수행되어야 하는 지점과 완전히 정렬될 때까지 돌립니다(아래 참조).
이제 동일한 교정을 수행하는 데 채널이 두 개 밖에 없다는 것을 깨달았습니다.
위상 조합 B의 BEMF가
C를 사용하는 경우 H2의 상승 에지는 BC 곡선과 관련됩니다.
여기서 위상 변화를 수행해야 하는 이유는 항상 모터 토크를 최대한 높게 유지하기 위해서입니다.
역전위는 토크에 비례하며 역전위가 다음 단계 곡선 아래로 지날 때 각 위상 변화가 발생한다는 것을 알 수 있습니다.
따라서 실제 토크는 각 위상 조합의 가장 높은 부분으로 구성됩니다.
범위에 액세스할 수 없는 경우 정렬에 대한 내 생각은 다음과 같습니다.
이는 실제로 BLDC 모터의 작동 방식을 알고 싶어하는 모든 사람에게 흥미로운 연습입니다.
모터 A상(양극)과 B상(음극)을
전원에 연결하고 전원을 켜면 모터가 조금 회전한 후 정지합니다.
이후 음극 전원 리드를 C상으로 이동시켜 전원을 투입하면 모터는 더욱 회전하여 정지하게 됩니다.
시퀀스의 다음 부분은 양극 리드를 위상 B 등으로 이동하는 것입니다.
이렇게 하면 모터는 항상 토크가 0인 위치에서 정지합니다. 이는 차트가 차트의 x축을 통과하는 한 위치에 해당합니다.
세 번째 위상 조합의 영점은 처음 두 조합의 위상 변화 위치에 해당합니다.
따라서 B-C 조합의 제로 토크 위치는
h2의 상승 에지를 위치시키려는 위치입니다.
미세한 표시나 날카로운 칼날로 이 위치를 표시한 다음 H2의 출력이 이 표시보다 정확히 높아질 때까지 DMM을 사용하여 홀 센서 홀더를 조정합니다.
학교 일정에서 조금 벗어나더라도 모터는 잘 작동해야 합니다.
3상 모터 위상은 L6234 3상 모터 드라이버로부터 전원을 공급받습니다.
시간이 지나도 견딜 수 있는 좋은 제품이라는 것을 알았습니다.
전력 전자 장치를 사용할 때 실수로 부품이 튀는 경우는 여러 가지가 있습니다. 저는 전기 엔지니어가 아니며 무슨 일이 일어나고 있는지 항상 알지 못합니다. 우리 학교 프로그램에서는
자체적으로 만들었습니다 .
6개의 MOSFET 트랜지스터와 6개의 다이오드로 구성된 3상 하프 브리지 출력을
우리는 이것을 다른 드라이버 Intersil의 HIP4086에 사용했지만 이 설정에는 많은 문제가 있었습니다.
우리는 많은 트랜지스터와 칩을 태웠습니다.
저는 L6234(
모터)를 12V에서 실행합니다.
L6234에는 6개 트랜지스터의 하프 브리지를 제어하는 특이한 입력 세트가 있습니다.
모든 트랜지스터에 입력이 있는 것은 아니지만
세 단계 각각에 대해 활성화(EN) 입력이 있고 또 다른 입력(IN)
개방 위상(상위 또는 하위)에 있는 트랜지스터를 선택합니다.
예를 들어, 트랜지스터 1(상위)과 6(하위)을 켭니다.
EN1과 EN3은 모두 하이(
EN2는 스테이지를 닫힌 상태로 유지하기 위해 로우)
IN1 High, IN3 로우입니다.
이는 상 조합 -C를 만든다.
L6234 애플리케이션 노트에서는 모터의 속도를 제어하는 데 사용되는 PWM을 IN 핀에 적용하라고 제안했지만, 당시에는 위상의 위쪽과 아래쪽 트랜지스터를 교대로 켜는 것이 '이상하다'고 생각했기 때문에 EN 핀에서 하기로 결정했습니다.
실제로 두 위상의 낮은 트랜지스터는 동일한 전위를 가지므로 둘 다 전류를 통과하지 않기 때문에 동시에 켜도 아무런 문제가 없는 것 같습니다.
제 방법으로는, 높은 위상은 전체 위상 변경 동안 활성화되고 비활성화됩니다.
아래는 모터 드라이브의 회로도이며 Arduino 보드에 핀 연결을 추가했습니다. 또한
양극 배터리 리드와 회로 사이에 2.5A 퓨즈를 추가하고 전원 공급 장치와 GND 사이에 100uF 커패시터를 융합하여 재생 전류의 리플을 줄입니다.
따라서 더 큰 버전의 경우 설명서를 참조하세요. L6234.
참고: Mike Anton은 L6234용 PCB를 만들었습니다.
시스템
사양 및 구매 정보는 다음 링크를 참조하세요. 3에 대해 많이 찾지 못했습니다.
해 주시면 감사하겠습니다. 회생 제동에서는 제어
저는 전기 엔지니어가 아니므로 설명을 수정
제가 사용한 회생 제동 방법은
도 토크를 최대화하지만 이번에는 전류를 배터리로 다시 보내는 동안 모터 속도가 느려지는 경우가 있습니다.
S. govt 연구소의 논문에서 나온 것입니다 (
자동차 모터에 대해 많은 연구를 하는
그림에서는 BEMF가 Stage B에서 높고, 이 경우 전류가 B에서 회생 제동으로 흐를 수 있으며, Low-End 트랜지스터는 빠르게 켜지고 꺼집니다(초당 수천 개의 PWM 스위치). Low 트랜지스터가
그러나 이 두 번째 논문에 제공된 설명은 부분적으로 잘못된 것 같습니다).
모터가 회전하면 모터 위상의 BEMF 전압이 위아래로 변동합니다.
그림.
전류가 흐릅니다. 첫 번째
전력 전자 측면
). 이 에너지는 저급 트랜지스터가 꺼지면 방출되지만, 더 높은 전압에서는
켜지 면
전류가 즉시 각 트랜지스터 옆에 있는 'anti-excitation' 다이오드를 통해 흐른 다음 배터리로 전류가 흐르는 것을 방지합니다
에서 이 회로는 에너지가 모터의 위상에 저장되는 부스트 컨버터라는 장치와 같습니다(Wikipedia에는 부스트 컨버터가 작동하는 방식을 설명하는 좋은 기사가 있습니다
. 구동과 반대로) 모터
속도를 늦추는 네거티브 토크를 생성하기 위해 자석 링과 상호작용합니다. 로우사이드 트랜지스터 는 PWM 스위치를 사용하며
모터의 정류
,
구동 시
는 가능한
PWM의 듀티 사이클은 제동량을 제어합니다.
가장 높은 토크를 유지하기 위해 적절한 과정에서 한 조합에서 다음 조합으로 전환됩니다 .
일부 전환 모드에서 모터가 가능한 한 많은 네거티브 토크를 생성하기 때문에
비디오를 보면 알 수 있습니다. 회생 브레이크는 잘 작동하지만 잘 작동하지 않는 것 같습니다.
제가 사용하는 하드 드라이브 모터는 토크가 매우 낮기 때문에 최고 속도를 제외하고는 BEMF를 많이 생성하지 않습니다.
으로 낮은 전압(12V)에서 작동합니다. 게다가, 항여자 다이오드를 통과하는 각 경로는 전압을 크게 감소시킵니다.
또한, 제 시스템은 상대적
. 아래는 Arduino의 입력 및 출력 목록입니다.
일반 정류기 다이오드를 사용하면 전압 강하가 낮은 특수 다이오드를 사용하면 더 나은 성능을 얻을 수 있습니다
디지털
또한 내 보드의 차트와 사진도 포함합니다. 2 -
디지털 입력 홀 1
120K 저항
3 디지털 입력 - 120K 저항 400ohm 저항 6
Gnd 4 홀
출력
400ohm 저항기와 직렬로 연결된 2개의 디지털 출력 7 400ohm 저항기와 직렬로 연결된 3개의 디지털 출력 9- 400ohm 저항기와 직렬로 연결된 EN 1의
저항기
10- 400ohm
와
직렬로 연결된
EN 2의 디지털 출력 11-
EN 3 디지털 출력은 400ohm 저항기와 직렬로 연결됨, 100kohm 전위차계, 양쪽 끝에 5v 및 gnd 연결 이 전위차계는
모터 속도와 제동 볼륨을 제어하는 데 사용됩니다.
5V 전원 공급 장치는 홀 센서를 실행하는 데에도 사용됩니다(5단계 참조).
여기에 설명이 포함된 Ardjuino용으로 작성한 전체 프로그램이 있습니다./* bldc_congroller 3. 1.
*3 by David Glazer
1
* 회전 디스크 드라이브 모터 * 회생 제동 포함 단일 전위차계로 제어되는 속도 및 제동 * 3개의 홀
효과 센서에 의한 모터 위치 * Arduino는 3개의 홀 센서(핀 2,3,4)로부터 출력을 수신합니다
* 그리고 그 조합을 32kHz에서 핀 9, 10, 11에서 6개의 서로 다른 위상 변화 단계로 변환합니다 * PWM 출력(
핀 5,6, 7에서 각각 EN 1,2, 3*3 DO에 해당(IN 1,2,3)
* 0에서 시뮬레이션 연결 PWM 듀티 사이클을 변경하고 * 운전과 회생 제동 사이를
500- 523:
택시 * 524- 1023:
변경합니다. *
. */
다양한 값을 인쇄하여 많은 라인을 주석 처리합니다
Int allstate1; 3
개의 홀 센서 변수 int HallState2; /3개의 홀 센서 모두의 이진 값 int MSPs
모터 링 * 직렬 연결에
= 0
/이 변수는 스로틀 전위차계의 간격 설정 위치를 측정하는 데 사용됩니다. (){pinMode
; /스로틀의 브레이크 레벨 = 0;
(2,INPUT)
L6234 핀 모드 모터 드라이버
; /
Hall 2 pinMode (4,INPUT); /
의 출력(
5,OUTPUT); /In 2 핀 모드(
7,OUTPUT); /EN 1 핀 모드(10,
OUTPUT); /EN 3/시리얼.
이 줄의 주석 처리를 제거하십시오.
프로그램 끝에서
/* 핀 9, 10 및 11의 PWM 주파수를 32kHz로 설정/먼저 세 개의 사전 분배기 비트를 모두 지웁니다. int prescalerVal = 0x07;
/prescalerVal이라는 변수를 생성하고 이진수 \'00000111\'
설정합니다. TCCR1B & = ~ Prescaler /이진수 \'11111000\'을 갖는 TCCR0B의 값/이제 적절한 사전 인코딩 비트를 설정합니다. int 사전 인코딩 비트 2 = 1
과 동일하게
이진수 \'00000001\'과 동일하게 설정 TCCR1B | = prescalerVal2; \'00000001\'/핀 3,11에 대해 PWM을 32kHz로 설정(
이 프로그램은 핀 11만 사용) /먼저 3개의
; /prescalerVal을
사전 교정기 비트
모두 지우기: TCCR2B & = ~ 사전 교정기; /그리고 이진수 \'11111000\'을 가진 TCCR0B의 값/이제 적절한 사전 인코딩 비트
루프(){
/Time
설정: TCCR2B | 2; /또는 이진수 \' 00000001\'/먼저 3개의 사전 인코딩된 비트
= millis(); 인쇄 프로그램이 시작된 후의 시간 println(time); /Throttle 전위차계 MSPs = map (
} /PRGROM의 메인
512,1023, 0,255 );
를 모두 지웁니다 .
Throttle,
전위차계의 위쪽 절반에 매핑됩니다.
/ 운전은
bSpeed = map(Throttle, 0,511,255, 0); /팟 하단
= 100; /홀 1에서 입력 값 읽기 2 = 디지털 읽기 (3)
에서 입력 값 읽기 3
의 절반 부분 회생 제동/MSPs ed
; 홀 2
= 디지털 읽기(4); 홀 3(8, HallState1)
에서 입력 값 읽기/숫자 쓰기는 원래 digitalWrite(9, HallState2)를 디버깅하는 데 사용됩니다. 3개의 홀 센서/* 시리즈의 바이너리 값. println
(HallState1); Serial.println(HallState2); Serial.println(\' \'); println(mSpeed); //Serial.
println(HallVal); //Serial. print(\'\');
/Monitor transistor output/delay (1000);
/* T1 = digitalRead (2); //T1 = ~T1;
T2 = digitalRead (4); //T2 = ~T2;
T3 = digitalRead (5); //T3 = ~T3; Serial. print(T1); Serial. print(\'\t\'); Serial. print(T2); Serial. print(\'\t\'); Serial. print(T3); Serial. print(\'\'); Serial. print(\'\'); Serial. print(digitalRead(3)); Serial. print(\'\t\'); Serial. print(digitalRead(9)); Serial. print(\'\t\'); Serial. println(digitalRead(10));
Serial.print(\'\'); //delay(500); */운전 단계 변경/각 이진수에는 출력 Arduino의 값을 변경하는 데 사용되는 비트 수학이 있습니다. /PORTD에는 각 위상에 대한 IN 핀
(0 = OFF, 255 = ON 또는 전위차계로 제어되는 스로틀 값). if
. Arduino 명령 비유에 의해 제어되는 경우 PWM의 듀티 사이클을 설정합니다
의 출력이
포함되어 있습니다
= 1111xxx00 ;
3
Case
(throttle > 511){switch (HallVal){
홀 입력을 나타내며
은 변경되어서는 안 됩니다.
:/PORTD
/핀 0- 7 xxx의 예상 출력은
PORTD & = B00011111
= B01100000 ;
/Analowrite (9,mSpeed);
A 위상의 PWM(
고급 트랜지스터)analogWrite(10,0); 위상 B 폐쇄
(duty = 0)analogWrite(11,255); // Phase C on -duty = 100%(저급 트랜지스터)break;
7 PORTD
/
& = B00011111;
PORTD | = B00100000; /Analowrite(9,mSpeed); A상 PWM(고급 트랜지스터)analogWrite(11,0); //Phase B off(듀티 = 0)break; B101xxx00; /핀 0-7
사례
PORTD
= B10100000
&
; AnalogWrite(11,mSpeed);
4:/PORTD =
의 예상 출력
B100xxx00; PORTD & = B00011111; PORTD | = bym000
;
/AnalogWrite(11,mSpeed);
사례 6:/PORTD = B110xxx00;
의 예상 출력 ;
/핀 0-7
000 =;
아날로그 쓰기(10,mSpeed); 아날로그 쓰기(11,0); 사례 2:
/PORTD
(L6234의
IN 핀 출력) 재생 제동 중에는 각 단계의 낮은 트랜지스터만 사용 됩니다. else{ /PORTD = B000xxx00;
= B010xxx00; /핀
/핀 0-7의 예상 출력
0-7 PORTD & = B0201700 PORTD | AnalogWrite(10,mSpeed)
PORTD | = bym0000; // 스위치(HallVal){ 사례 3:
; AnalogWrite(11,255); }} /회생 브레이크 단계 변경/PORTD
아날로그 쓰기(9,0); 아날로그 쓰기(11,0)
; 아날로그 쓰기(11,0); (9,0);
아날로그 쓰기(11,bSpeed); 사례 4:
아날로그 쓰기(11,bSpeed); 사례 6: 아날로그 쓰기(11,0); (9,0
); analogWrite(10,bSpeed); analogWrite(11,0); break; }}
/Time = millis ();
Time after the printing program starts. println(time); //Serial. print(\'\'); //Serial. flush();
/If you want to debug using a serial port, please uncomment}
I think the operation that Arduino does in this project is so simple that it seems like a waste to do this task with a
실제로 L6234의 애플리케이션 노트에서는
이 작업을 수행하기 위해 간단한 프로그래밍 가능 게이트 어레이(Lattice Semiconductor에서 만든 GAL16V8)
를 권장합니다. 그러나 IC의 가격은 newark에서 2.39달러에 불과합니다.
또
다른 옵션은
L6234 IC를 구동할 수 있는 비교적 간단한 논리 시퀀스를 결합하는 것입니다. 세 개의 홀 센서의 출력은
다음과 같습니다. A 단계에 대한 차트와 세 단계 모두에 대한 진리표(
B 및 C 단계의 논리 회로를 위해서는 'not' 문을 반대쪽으로 전환해야 합니다.
이 접근 방식의 문제점은 각 단계에 거의 20개의 연결이 있으므로 이를 합치는 데 상당한 작업이 필요하다는 것입니다.
프로그래밍 가능한 논리 게이트로 프로그래밍하는 것이 가장 좋습니다.