Servo Biblioteca de Blocos para Simulink Arduino AlvoConteúdo [esconder] 1 Introdução2 Instalação da Biblioteca3 Usando Biblioteca4 Demonstrações5 Como funcionaIntrodução O objetivo da biblioteca é permitir que os usuários controlem servos nos modelos Simulink compilados para o alvo Arduino. A biblioteca foi desenvolvida usando o Arduino Alvo localizado aqui: [ Arduino Alvo] a versão utilizada foi atualizado 2011/11/22. Embora não seja a última versão do Arduino IDE (1,0 neste momento), a versão 0023 está sendo usado, pois é o mais alto compatível com esta versão do alvo Arduino.
8
Embed
Servo Biblioteca de Blocos Para Simulink Arduino Alvo
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
7/22/2019 Servo Biblioteca de Blocos Para Simulink Arduino Alvo
A base desta biblioteca é uma biblioteca Servo incluído com o IDE Arduino. Olhando para o arquivos
Servo.h e Servo.cpp nos arduino-0023 \ bibliotecas diretório \ Servo.Porque é uma biblioteca C + +,
não podemos simplesmente incluí-lo em um arquivo de TLC e utilizar suas funções. A chave pararesolver este problema é funções wrapper. Utilizando estes, o C + + funções podem ser envoltos em
uma função C, que pode então ser chamado pelo ficheiro de TLC.
Para entender o que está acontecendo nos bastidores, olhe primeiro para o bloco digitalOutput. É
uma máscara para a função S sfunar_digitalOutput e seus arquivos de origem estão localizados na
pasta C: \ arduinoTarget diretório \ blocos. Navegar para este diretório irá revelar quatro arquivos
com o nome sfunar_digitalOutput com extensões. C,. Tlc,. Mex32 e. Mex64. O arquivo C é o que
define o bloco. Nenhuma chamada para o comando digitalOutput acontecer aqui, ele só diz o nome,a função S.Para fazer com que os blocos de servo, eu mudei o nome aqui para o que eu usei para
cada bloco (digitalServo, digitalServo2, ect.)
A próxima peça do quebra-cabeça são os arquivos de TLC. O arquivo TLC diz Simulink como
compilar o código para o Arduino e que precisa acontecer. Olhando sfunar_digitalOutput.tlc mostra
dois comandos Arduino familiares: pinMode () e digitalWrite (). p1_val é a variável que representa o
primeiro parâmetro (o número de pinos) e u1_val é a primeira entrada (o valor de escrever). Perto do
topo você pode ver um arquivo que está sendo incluído block_common_includes.tlc. Navegar para
este arquivo também localizado no diretório blocos revela que existem dois arquivos que estão
sendo incluídos WProgram.h e io_wrappers.h. WProgram.h é um arquivo do Arduino IDE que cuida
de definir as portas e também inclui as outras bibliotecas necessárias para executar as funções
básicas de I / O em Arduino, juntamente com HardwareSerial.h.
io_wrappers.h e io_wrappers.cpp é onde todo o C + + para C mágica acontece. Abrindo os arquivos
localizados no diretório blocos revela três funções que à primeira vista parece familiar: Serial_begin,
Serial_read, Serial_write. Em io_wrappers.cpp o embrulho acontece a criação de uma função C para
chamar a função C + +. Serial_begin chama Serial.begin e o mesmo para as outras duas funções.
Aqueles que estão familiarizados com a programação vai dizer onde está o objeto de série vem que
podemos começar, ler e escrever a partir de? A resposta está no HardwareSerial.h e. Cpp localizado
no arduino-0023 \ hardware \ arduino \ núcleos \ arduino. Olhando para o final do arquivo, podemos
ver os objetos em série que está sendo criado com base na placa que foi selecionado. Este é o lugar
onde eu decidi que será necessário pré-definir cada objeto servo que vai usar, o que levou à criação
de oito blocos servo individuais. Como um aparte eu tentei mudar a placa para a mega 2560 e
mudando o Serial.begin para Serial1.begin no arquivo io_wrappers, mas não teve sucesso. Eu acho
7/22/2019 Servo Biblioteca de Blocos Para Simulink Arduino Alvo
que isso pode estar relacionado à forma como o if são formuladas e quais variáveis são
manipulados pelo destino Arduino quando uma configuração de placa particular é selecionado.
Com esta nova compreensão de como os blocos de série trabalhar com o uso de arquivosio_wrappers, eu criei os blocos servo. Após a sintaxe dos blocos de série, criei 8 versões das
funções Servo_attach e Servo_write tanto na. H e arquivos. Cpp. No arquivo cpp., É necessário
incluir o arquivo Servo.cpp no topo para que possamos fazer chamadas para as funções. Outra
adição ao arquivo cpp. Está adicionando as definições dos oito objetos servo (Servo ServoA ;).
Depois de modificar os arquivos io_wrappers podemos voltar ao arquivo de TLC. Usando o arquivo
sfunar_digitalOutput como base para os blocos de Servo, tomei a configuração servo básico usado
na varredura de demonstração Arduino (no Arduino IDE em exemplos> Servo-> sweep). Há duascoisas necessárias para fazer o trabalho de servo. Primeiro precisamos para anexá-lo a uma porta
e, em seguida, é preciso escrever um valor a ela. Em vez de definir a pinMode (int pin) a partir
io_wrappers.h Servo_attach correspondente é chamado. Na seção de saídas do arquivo TLC. Que
não precisa mais digitalWrite assim chamamos a função Servo_write correspondente (int
posição). Além disso, note que os nomes da função foram alterados para cada instância do arquivo
digitalServo.tlc.
A peça final é criar os arquivos mex. Os arquivos mex são compilados a partir do arquivo c. E combase em se você estiver em um computador de 32 ou 64 bits ou um mex32. Mex64 arquivo. Será
concluída. Para criar o arquivo, tipo simples mex no MATLAB prompt de comando "mex
your_file.c". Isso irá gerar o arquivo mex. (Eu só criou. Mex32 arquivos desde que eu estou usando
32-bit Windows 7 e MATLAB)
Os blocos são simplesmente S-funções que foram mascarados (novamente eu baseei tudo sobre os
blocos alvo Arduino existentes)
Quanto às áreas de expansão, como mencionado no início Arduino UNO e MEGA tanto apoio de
mais de 8 servos, mas na época eu não prevejo eu precisar de mais do que 8. Não deve ser muito
difícil para um usuário deste pacote para adicionar mais servos, conforme necessário, seguindo o
padrão I seguido. As funções adicionais estão disponíveis na biblioteca de Servo, e, portanto, os
blocos podem ser criados para estes também igualmente seguindo a técnica usada na criação
destes blocos. Alguns usuários podem querer definir o seu servo max e min. É possível adicionar
parâmetros adicionais para a função de S para max e min (e também definir padrões deve o usuário
7/22/2019 Servo Biblioteca de Blocos Para Simulink Arduino Alvo